发信人: sodo()
整理人: wenbobo(2002-12-24 09:14:54), 站内信件
|
呵呵,闲着也是闲着,我也来灌灌水:)
关于注册表的操作是很有意思的,不过使用的时候一定要小心,要不然会弄得你 焦头烂额的,小弟就曾经被“暗算”过:(
查询字符串型值的时候一定要注意,除非你本来就知道该字符串的长度,否则还 是分两步进行的好。
举个例子:
////////////////////////
//例子
CString strGetString;//用来存放查询来的字符串值
CString strValueName;//所查值的名字
HKEY hKey;//已打开键的句柄
DWORD dwCount;//记录字符串的长度+1(包括NULL字符)
LONG myError;//存放返回的错误代码
//给上述某些变量赋值
...
strValueName=...;
hKey=...;
...
//赋值完毕
//////////////////////
//注册表操作
//第一次取得字符串的总长度,以便给strGetString分配空间
myError=RegQueryValueEx(//第一次调用
hKey,//已打开的键的句柄
(LPCTSTR)strValueName,//值名
0,//保留
REG_SZ,//值的类型
NULL,//数据存放地址,为NULL则只给下面参数赋值
&dwCount//字符串的长度+1
);
if(myError!=ERROR_SUCCESS) return FALSE;
//第二次利用上次调用所得字符串总长为strGetString分配空间
//并把字符串值存放在该空间中
myError=RegQueryValueEx(//第二次调用
hKey,//已打开的键的句柄
(LPCTSTR)strValueName,//值名
0,//保留
REG_SZ,//值的类型
strGetString.GetBuffer(dwCount),//数据存放地址
&dwCount//字符串的长度+1
);
strGetString.ReleaseBuffer();//把分配的空间内容加入CString对象
if(myError!=ERROR_SUCCESS) return FALSE;
//注册表操作完成
//其他操作
...
...
/////////////////////////
小试牛刀,不正确的请高手指点。
-- ※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.103.48.254]
|
|