- ベストアンサー
RegQueryValueExについて
Visual Studio C++ .NET 2003でレジストリの値を変更するコンソールアプリケーションを作りたいのですが、 RegQueryValueExで値を読み出すことができません。 下記のようにするとPathLenは正しく読み出せているのですが肝心のPathに何も格納されていないようです。 また4番目の引数はREG_SZが正しいように思えるのですがNULLでないと実行時に "ハンドルされていない例外:System.NullReferenceException:オブジェクト参照がオブジェクト インスタンスに設定されていません" というメッセージが出て途中終了してしまいます。 どなたかよろしくお願い致します。 long lRet; HKEY hkResult; CString Res; char Path[256]; long PathLen=0; //レジストリのハンドルと環境変数のレジストリをリードモードでオープン lRet = RegOpenKeyEx( HKEY_USERS, "S-1-5-21-842925246-1563985344-1957994488-500\\Environment", 0, KEY_ALL_ACCESS, &hkResult ); if(lRet == ERROR_SUCCESS) { //現在のパスを読み込む PathLen = strlen(Path); RegQueryValueEx( hkResult, "NEWVALUE", NULL, /*(LPDWORD)REG_SZ,*/NULL, (LPBYTE)Path, (LPDWORD)&PathLen ); } printf("%s\n", Path);printf("%ld\n", PathLen); //ハンドルをクローズ RegCloseKey(hkResult); インデントができなかったので見づらくてすみません。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>PathLen = strlen(Path); のところで、PathLenは0になってるんじゃないですか? たぶん・・・。
その他の回答 (1)
- taka_tetsu
- ベストアンサー率65% (1020/1553)
1. 失敗したときの戻り値は? 2. KEY_ALL_ACCESSにしないといけませんか? 3. 実行しているユーザに管理者権限ありますか? http://www.microsoft.com/japan/developer/library/jpwinpf/_win32_regopenkeyex.htm
お礼
質問した後、戻り値を調べてみたところ 234 MORE_DATAなんとかだったので下のように間違いに気づきました。 ありがとうございました。
お礼
全くその通りでした。 実は質問した後で気づいたのでしまったと思っていたのですが・・・。 ありがとうございました。