windows注册表阅读

时间:2012-09-05 07:31:59

标签: c++ windows registry

使用此代码段:

TCHAR buf[255] = {0};
DWORD dwBufSize = sizeof(buf);
HKEY hKey = 0;
DWORD dwType = REG_DWORD;

if ( RegOpenKeyEx( HKEY_CURRENT_USER, TEXT("Software\\Developer\\KGReader"), 0, KEY_QUERY_VALUE, &hKey) == ERROR_SUCCESS)
{
    if( RegQueryValueEx( HKEY_CURRENT_USER, TEXT("Software\\Developer\\KGReader\\ComPort"), 0, &dwType, (LPBYTE)buf, &dwBufSize ) == ERROR_SUCCESS )
    {
        nrPort = _wtoi(buf);

    }

    if( RegQueryValueEx( HKEY_CURRENT_USER, TEXT("Software\\Developer\\KGReader\\KGID"), 0, &dwType, (LPBYTE)buf, &dwBufSize ) == ERROR_SUCCESS )
    {
        nrCentrala = _wtoi(buf);
    }

}
  1. 使用hKey方法没有将值传递给RegOpenKeyEx
  2. 虽然RegOpenKeyEx返回ERROR_SUCCES,但RegQueryValueEx返回2(ERROR_FILE_NOT_FOUND)。 KGIDComPort确实存在,我自己添加了它,我仔细检查了路径。

2 个答案:

答案 0 :(得分:4)

hKey来自RegOpenKeyEx()来自HKEY_CURRENT_USER来自RegQueryValueEx()来自RegQueryValueEx()来自if( RegQueryValueEx(hKey, TEXT("ComPort"), 0, &dwType, (LPBYTE)buf, &dwBufSize ) == ERROR_SUCCESS ) buf的第二个参数是值的名称,而不是路径。

例如:

dwBufSize

在第二次致电RegQueryValueEx之前,请务必重置memset(buf, 0, sizeof(buf)); dwBufSize = sizeof(buf); RegOpenKeyEx()

RegQueryValueEx()

出于错误报告的目的,您应该保存RegOpenKeyEx()和{{1}}函数的返回值,以便可以了解失败原因。

发布的代码可能不完整,但如果对{{1}}的调用成功,则会确保调用RegCloseKey(hKey)

答案 1 :(得分:1)

RegQueryValueEx的第一个参数应该是HKEY打开的RegOpenKeyEx。另外,第二个参数应该只是一个值名称,而不是完整路径:

if( RegQueryValueEx( hKey, TEXT("ComPort"), 0, &dwType,
                     (LPBYTE)buf, &dwBufSize ) == ERROR_SUCCESS )