使用注册表

【勇芳软件工作室】汉化HomePreviousNext

以下示例演示了使用RegQueryInfoKeyRegEnumKeyRegEnumValue功能。传递给每个功能的【的hKeyru-Latn】参数是打开的键的句柄。该键必须在函数调用之前打开,之后关闭。

// QueryKey - 枚举给定键和相关联的子项

//值,然后复制关于键和值的信息

//进入一对编辑控件和列表框。

// hDlg - 包含编辑控件和列表框的对话框

// hKey - 其子项和值将被枚举的键

VOID QueryKey(HWND hDlg,HANDLE hKey)

{

CHAR achKey[MAX_PATH];

CHAR achClass[MAX_PATH] = ""; /* buffer for class name */

DWORD cchClassName = MAX_PATH; /* length of class string */

DWORD cSubKeys; /* number of subkeys */

DWORD cbMaxSubKey; /* longest subkey size */

DWORD cchMaxClass; /* longest class string */

DWORD cValues; /* number of values for key */

DWORD cchMaxValue; /* longest value name */

DWORD cbMaxValueData; /* longest value data */

DWORD cbSecurityDescriptor; /* size of security descriptor */

FILETIME ftLastWriteTime; /* last write time */

DWORD i, j;

DWORD retCode, retValue;

CHAR achValue[MAX_VALUE_NAME];

DWORD cchValue = MAX_VALUE_NAME;

CHAR achBuff[80];

//获取类名和值计数。

RegQueryInfoKey(hKey,/ * key handle * /

achClass,/ *缓冲区的类名* /

& cchClassName,/ *类字符串的长度* /

NULL,/ * reserved * /

& cSubKeys,/ *子项数* /

& cbMaxSubKey,/ *最长子项大小* /

& cchMaxClass,/ * longest class string * /

& cValues,/ *此键值的值*

& cchMaxValue,/ * longest value name * /

& cbMaxValueData / *最长值数据* /

& cbSecurityDescriptor,/ *安全描述符* /

& ftLastWriteTime); / *最后写入时间* /

SetDlgItemText(hDlg, IDE_CLASS, achClass);

SetDlgItemInt(hDlg, IDE_CVALUES, cValues, FALSE);

SendMessage(GetDlgItem(hDlg,IDL_LISTBOX))

LB_ADDSTRING, 0, (LONG) "..");

//枚举子键,循环直到RegEnumKey失败。然后

//获取每个子键的名称,并将其复制到列表框中。

SetCursor(LoadCursor(NULL, IDC_WAIT));

for (i = 0, retCode = ERROR_SUCCESS;

retCode == ERROR_SUCCESS; i++) {

retCode = RegEnumKey(hKey, i, achKey, MAX_PATH);

if (retCode == (DWORD)ERROR_SUCCESS)

SendMessage(GetDlgItem(hDlg,IDL_LISTBOX))

LB_ADDSTRING, 0, (LONG) achKey);

}

SetCursor(LoadCursor (NULL, IDC_ARROW));

//枚举键值。

SetCursor(LoadCursor(NULL, IDC_WAIT));

如果(cValues)

for (j = 0, retValue = ERROR_SUCCESS;

j < cValues; j++) {

cchValue = MAX_VALUE_NAME;

achValue[0] = '\0';

retValue = RegEnumValue(hKey, j, achValue,

& cchValue,

NULL,

NULL,/ * & dwType,* /

NULL,/ * & bData,* /

NULL); /* &bcData */

if (retValue != (DWORD) ERROR_SUCCESS &&

retValue != ERROR_INSUFFICIENT_BUFFER) {

wsprintf(achBuff,

"Line:%d 0 based index = %d, retValue = %d, "

"ValueLen = %d",

__LINE__, j, retValue, cchValue);

MessageBox (hDlg, achBuff, "Debug", MB_OK);

}

achBuff[0] = '\0';

//将每个值添加到列表框。

if(!lstrlen(achValue))

lstrcpy(achValue, "<NO NAME>");

wsprintf(achBuff, "%d) %s ", j, achValue);

SendMessage(GetDlgItem(hDlg,IDL_LISTBOX2),

LB_ADDSTRING, 0, (LONG) achBuff);

}

SetCursor(LoadCursor(NULL, IDC_ARROW));

}