发信人: 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]
  | 
 
 
 |