使用 C# 应用程序的 PocketPC 注册表






2.94/5 (8投票s)
用于处理 PocketPC 注册表的库

引言
注册表是 Windows 操作系统中存储键值对的系统数据库。Windows CE 系统注册表以分层(树形)结构组织。它用于存储操作系统、应用程序和硬件设备的配置信息。此外,注册表还包含有关已安装的应用程序、驱动程序和可用硬件的信息。Pocket PC 注册表与桌面 Windows 注册表非常相似。您可以使用 regedit 工具查看桌面 PC 的结构。
背景
Pocket PC 注册表有四个主要的根节点和几个附加节点
- HKEY_CLASSES_ROOT
- HKEY_CURRENT_USER
- HKEY_LOCAL_MACHINE
- HKEY_USERS
- HKEY_PERFORMANCE_DATA
- HKEY_PERFORMANCE_TEXT
- HKEY_PERFORMANCE_NLSTEXT
- HKEY_CURRENT_CONFIG
- HKEY_DYN_DATA
用于处理 Pocket PC 注册表的函数,例如打开根节点、创建键和值、删除节点、枚举子项,包含在 coredll.dll 系统库中。这组函数是 WinAPI 的一部分。
MSDN 注释
Windows API 是 Windows 操作系统的一部分的动态链接库 (DLL)。当编写等效过程有困难时,您可以使用它们来执行任务。
为了在文章中使用 PocketPC 注册表 API,我们将考虑 DllImport 属性
MSDN 注释
DllImport 属性提供了一种在没有类型库的情况下调用 DLL 中函数的方法。DllImport 大致等同于使用 Declare 语句,但提供了对函数调用方式的更多控制。
Using the Code
该库包含一个名为 CERegister
的单个类,其中包含用于从注册表中设置和获取字符串值的函数
RegGetStringValue
RegSetStringValue
它们用法的示例
PocketRegistry.CERegister.RegSetStringValue(PitReg.RegRoot.HKEY_CURRENT_USER,
"pocketpc\\CERegistry", "StringValue", "123");
这里还有一些 DllImport 属性用法的简要示例
创建注册表键
//
// RegCreateKeyEx
//
[System.Runtime.InteropServices.DllImport("coredll.dll")]
private static extern int RegCreateKeyEx(
uint hKey,
string lpSubKey,
uint Reserved,
string lpClass,
uint dwOptions,
uint samDesired,
uint lpSecurityAttributes,
ref uint phkResult,
ref uint lpdwDisposition
);
打开注册表键
//
// RegOpenKeyEx
//
System.Runtime.InteropServices.DllImport("coredll.dll")]
private static extern int RegOpenKeyEx(
uint hKey,
string lpSubKey,
uint ulOptions,
uint samDesired,
ref uint phkResult
);
查询注册表值
//
// RegQueryValueEx
//
[System.Runtime.InteropServices.DllImport("coredll.dll")]
private unsafe static extern int RegQueryValueEx(
uint hKey,
string lpValueName,
uint lpReserved,
out uint lpType,
byte * lpData,
ref uint lpcbData
);
获取字符串值有一个技巧。您应该首先检索值的长度,然后检索缓冲区中的值
private static string GetStringValue(uint Key, string Name)
{
uint buflen = 0;
uint type = 0;
char []str = null;
unsafe
{
//Get the length of the value:
int r = RegQueryValueEx(Key,Name,0,out type,null,ref buflen);
if (type!=(uint)RegType.REG_SZ) throw new Exception (
"The key is not of string value");
//Create a buffer for the value:
byte[] rez_buf = new byte [buflen];
//Retrieve the value to the buffer
fixed(byte *charpointer=&rez_buf[0])
{
int rez = RegQueryValueEx(Key,Name,0,out type,charpointer,ref buflen);
if (rez != 0) throw new Exception ("Can't get value");
}
str = new char [buflen];
for (int i=0; i<buflen; i++)
str[i] = (char)rez_buf[i];
}
return new string (str);
}
更多信息
有关更多信息,您可以参考 MSDN
历史
- 提交于 2007 年 5 月 31 日