• ベストアンサー

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); インデントができなかったので見づらくてすみません。

質問者が選んだベストアンサー

  • ベストアンサー
  • ngsvx
  • ベストアンサー率49% (157/315)
回答No.1

>PathLen = strlen(Path); のところで、PathLenは0になってるんじゃないですか? たぶん・・・。

Soldier
質問者

お礼

全くその通りでした。 実は質問した後で気づいたのでしまったと思っていたのですが・・・。 ありがとうございました。

その他の回答 (1)

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.2

1. 失敗したときの戻り値は? 2. KEY_ALL_ACCESSにしないといけませんか? 3. 実行しているユーザに管理者権限ありますか? http://www.microsoft.com/japan/developer/library/jpwinpf/_win32_regopenkeyex.htm

参考URL:
http://www.microsoft.com/japan/developer/library/jpwinpf/_win32_regopenkeyex.htm
Soldier
質問者

お礼

質問した後、戻り値を調べてみたところ 234 MORE_DATAなんとかだったので下のように間違いに気づきました。 ありがとうございました。