rt
解决方案 »
- 我想用D3DXFONT_DESC字体画文字,怎么才能获取到字符串的像素长度?
- MFC中如何找出已经删除但未清除关联变量声明的控件
- LIBCD.lib(crt0.obj):error LNK2001:unresoloved external symbol 进来救命
- 求助……visual studio 2008 写一个简单的MFC程序找不到程序入口的问题
- 如何在统一块区域不同时候显示不同窗口
- 服务器程序能不能调用ssh接口,实现登陆认证?
- [急,高手帮我啊]怎么在InstallShield中把文件安装到固定目录啊??
- socket 连接居然出错!!
- 为什么会出现这样的error??
- 送分给您:请问继承ClistCtrl的DrawItem后如何控制重画一行的某个Cell?
- 问一下类型定义的简单问题!
- 关于动态连接库名字问题...
RegOpenKeyEx
RegQueryValueEx
RegQueryValueEx等函数来读取相关的项.另外,并不是所有软件安装都添加信息到注册表项的
RegCreateKeyEx()和RegCreateKey()
原形:LONG RegCreateKeyEx(
HKEY hKey, // 主键名称
LPCTSTR lpSubKey, // 子键名称或路径
DWORD Reserved, // 保留,为0
LPTSTR lpClass, // 没弄懂,我设为空也差不多
DWORD dwOptions,
/* 对你建立的键的一些选项,可以是这些值:REG_OPTION_NON_VOLATILE,REG_OPTION_VOLATILE,REG_OPTION_BACKUP_RESTORE第一个是默认的了。一般用第一个就可以了。*/
REGSAM samDesired, // 设置你对你建立的这个键的访问权限
LPSECURITY_ATTRIBUTES lpSecurityAttributes,
//不太明白
PHKEY phkResult, // 指向你建的句柄
LPDWORD lpdwDisposition //用来查看是打开一个已经有的键,还是新建了键
);
RegCreateKey()函数简单了不少,请自己看了。
返回值:不成功返回非0,成功返回ERROR_SUCCESS.
解释:打开指定的键或子键。如果要打开的键不存在的话,本函数会试图建立它。当在创建或打开注册表的键时,需要指定访问权限,而这些访问权限需要到一级。默认的权限是KEY_ALL_ACCESS权限。还有KEY_CREATE_LINK创建字符链权限,KEY_CREATE_SUB_KEY创建子键权限,KEY_EXECUTE读取键权限,KEY_NOTIFY获得修改键通知的权限,KEY_QUERY_VALUE查询键值的权限,KEY_SET_VALUE设置数据值的权限。注意不能在根一级建键,在注册表的根一级仅可有预定义的键。具体使用,请查看联机手册。
例子:
HKEY m_hkey;
DWORD dwDisposition;
long ret0=(::RegCreateKeyEx
(HKEY_CURRENT_USER,"REGD\\",0,NULL,
REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&m_hkey,&dwDisposition));
if(ret0!=ERROR_SUCCESS) //如果无法打开hKEY,则终止程序的执行
{
MessageBox("错误: 无法打开有关的hKEY!");
return;
}
if(dwDisposition==REG_OPENED_EXISTING_KEY)
MessageBox("打开了一个已经存在的键");
else
{
if(dwDisposition==REG_CREATED_NEW_KEY)
MessageBox("建立一个新键");
}
RegClosekey(m_hkey); 3·RegOpenKey()和RegOpenKeyEx()
原形:LONG RegOpenKeyEx(
HKEY hKey, // 要打开主键名
LPCTSTR lpSubKey, // 子键或路径
DWORD ulOptions, // 保留,为0
REGSAM samDesired, // 操作权限标志
PHKEY phkResult // 指向你打开键的句柄
);
返回值:不成功返回非0,成功返回ERROR_SUCCESS.
解释:该函数负责打开指定的键或子键,如果不存在他不建立。其他和RegCreateKeyEx()和RegCreateKey()基本相同。
RegQueryValue()和RegQueryValueEx()
原形:LONG RegQueryValueEx(
HKEY hKey, // 已打开的键的句柄
LPTSTR lpValueName, // 要查询值的名称,传如""为查询键下的默认值
LPDWORD lpReserved, // 保留,为0
LPDWORD lpType, // 查询的类型
LPBYTE lpData, // 数据存放的地址
LPDWORD lpcbData // 数据长度+1
);
返回值:不成功返回非0,成功返回ERROR_SUCCESS
解释:读取某子键下特定名称的值。
例子
CString m_strQ;//用来存放查询来的字符串值
DWORD m_dwCount;//记录字符串的长度+1(包括NULL字符)
::RegQueryValueEx(m_hkey,"",0,NULL,NULL,&m_dwCount);//先查询出字节空间
ret1=(::RegQueryValueEx
(m_hkey,"",0,NULL,(unsigned char *)m_strQ.GetBuffer(m_dwCount),&m_kk));
m_strQ.ReleaseBuffer();
MessageBox(m_strQ);