windows注册表
由于现在要编写一个程序,要进行一些关于注册表的操作,由于我以前没操作过注册表,请各位高手指点,最好给我一个源程序,只要能显示一下注册表的操作就可以,万分感谢
Email:wh_lhj@china.com
问题点数:59、回复次数:5Top
1 楼Smile_Tiger(笑面虎)回复于 2001-01-04 14:07:00 得分 0
搜索 与“注册表”有关的贴子Top
2 楼hnxrm(浪子)回复于 2001-01-04 14:13:00 得分 0
查看msdn.Top
3 楼adrianx(蓝色心情)回复于 2001-01-04 14:16:00 得分 29
下边这个例子是MSDN中的,hKey是个已用RegOpenKey或RegOpenKeyEx打开的注册键HKEY
如RegOpenKeyEx (HKEY_CLASSES_ROOT, "Testkey", 0, WRITE_OWNER, &hKey);
使用完了用RegCloseKey(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];
// Get the class name and the value count.
RegQueryInfoKey(hKey, // key handle
achClass, // buffer for class name
&cchClassName, // length of class string
NULL, // reserved
&cSubKeys, // number of subkeys
&cbMaxSubKey, // longest subkey size
&cchMaxClass, // longest class string
&cValues, // number of values for this key
&cchMaxValue, // longest value name
&cbMaxValueData, // longest value data
&cbSecurityDescriptor, // security descriptor
&ftLastWriteTime); // last write time
SetDlgItemText(hDlg, IDE_CLASS, achClass);
SetDlgItemInt(hDlg, IDE_CVALUES, cValues, FALSE);
SendMessage(GetDlgItem(hDlg, IDL_LISTBOX),
LB_ADDSTRING, 0, (LONG) "..");
// Enumerate the child keys, looping until RegEnumKey fails. Then
// get the name of each child key and copy it into the list box.
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));
// Enumerate the key values.
SetCursor(LoadCursor(NULL, IDC_WAIT));
if (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';
// Add each value to a list box.
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));
} Top
4 楼eyeblue(李洋)回复于 2001-01-04 14:39:00 得分 30
1,写注册表
HKEY hkey;
RegCreateKey(HKEY_LOCAL_MACHINE,"SOFTWARE\\MYSoft",&hkey); //创建一个主键,在regedit里象文件夹
RegSetValueEx(hkey,"MYName",0,REG_SZ,(LPBYTE)szName,strlen(szName)); //把szName的值放到子键MYName上去,如果没有该子键则自动
被创建,在regedit里有'ab'图标的
RegSetValueEx(hkey,"MYYear",0,REG_DWORD,(LPBYTE)&iMYYear,sizeof(int)); //整形iMYYear的值放到子键MYName上去,如果没有该子键
则自动被创建,在regedit里有'ab'图标的
RegCloseKey(hkey); //关闭
2,读注册表
HKEY hkey=NULL;
iRet=RegOpenKey(HKEY_LOCAL_MACHINE,"SOFTWARE\\MYSoft",&hkey); //打开主键MYSoft
if(hkey == NULL)
return false;
int iQueryType=REG_DWORD; //子键类型DWORD
int iResv=0;
int usize=sizeof(int);
iRet=RegQueryValueEx(hkey,"MYYear",NULL,(LPDWORD)&iQueryType,(LPBYTE)&iMYYear,(LPDWORD)&usize); //读子键MYYear到整形iMYYear
iQueryType=REG_SZ; //子键类型字符串
usize=32; //目标大小
iRet=RegQueryValueEx(hkey,"MYName",NULL,(LPDWORD)&iQueryType,(LPBYTE)szName,(LPDWORD)&usize); //读子键MYName到字符串szName
RegCloseKey(hkey); //关闭
Top
5 楼skt642()回复于 2001-05-31 18:01:00 得分 0
45738关注!Top




