1

Windowsレジストリでいくつかの基本的な操作を実行したいと思います。現在のユーザーキーを読み取るための小さなC++プログラムを作成しました。以下はコードスニペットです。RegOpenKeyEx()がERROR_SUCCESSを返さない理由は正直わかりません。ご意見をお聞かせください。

#include <Windows.h>

#include <iostream>
using namespace std;

int main(){

    HKEY hkey;

    if(RegOpenKeyEx(HKEY_CURRENT_USER, TEXT("SoftwareDevShed TutorialTest"), 0, KEY_ALL_ACCESS, &hkey) != ERROR_SUCCESS)
        cout<<"Error opening the key"<<endl;
    else 
        cout<<"Success"<<endl;
    system("PAUSE");
    return 0;

}
4

3 に答える 3

7

ここでバックスラッシュはどこにありますか:TEXT("SoftwareDevShed TutorialTest")?それを読むべきではありませんTEXT("Software\\DevShed Tutorial\\Test")か?

于 2012-05-31T13:50:46.847 に答える
1

TEXT()マクロは、Unicodeバージョンを使用してキーが開かれる可能性があることを示します。

試してみてください

RegOpenKeyExA(HKEY_CURRENT_USER, "<your correct Key name with backslashes>", 0, KEY_ALL_ACCESS, &hkey)
于 2012-05-31T13:53:32.603 に答える
1
#include <Windows.h>
#include <iostream>

int main(int argc, char *argv[])
{
    DWORD dwType;
    char  szVersion[255];
    DWORD dwDataSize = 255;
    memset(szVersion, 0, 255);

    // open the key for reading.
    HKEY hkeyDXVer;
    long lResult = RegOpenKeyEx(HKEY_CURRENT_USER, "SOFTWARE\\Software Nmae\\", 0, KEY_READ, &hkeyDXVer);

    if(ERROR_SUCCESS == lResult)
    {
       // read the version value
       lResult = RegQueryValueEx(hkeyDXVer, "RegistryValue", NULL, &dwType, (BYTE*)szVersion, &dwDataSize);
       if(ERROR_SUCCESS == lResult)
       {
          std::cout << "Value - " << szVersion << std::endl;
       }
    }

    system("pause");
    return 0;
}

このコードは、すべてのバージョンのWindowsで完全に機能します。

于 2012-12-05T05:17:46.660 に答える