2

私は C コードが苦手で、これが私の問題です。

レジストリに書き込もうとしてREG_DWORDいます(minGWを使用しています)。

ただし、エラー 998 が表示され、そのERROR_NOACCESS理由がわかりません。

すべてのものは有効なようです。

私の場合、私は書いてみます777

レジストリに値を追加するなどの基本的なタスクが非常に複雑に見え、Googleには情報が含まれていないのは本当に奇妙です

助けてください

これは私のコードです:

#define _WIN32_WINNT 0x0501
//#define _WIN32_WINNT 0x0500   // Windows 2000
//#define _WIN32_WINNT 0x0400   // Windows NT 4.0
//#define _WIN32_WINDOWS 0x0500 // Windows ME
//#define _WIN32_WINDOWS 0x0410 // Windows 98
//#define _WIN32_WINDOWS 0x0400 // Windows 95
#include <windows.h>
#include <stdio.h>

....

const char *WriteValue()
{
HKEY hkey;
LONG result_open, result_close;
const char *defaultVal = "0";
DWORD data = 777;
DWORD dwValue, dwType, dwSize = sizeof(dwValue);
DWORD szType = REG_DWORD;

printf("Opening Key...\n");
result_open = RegOpenKeyEx(HKEY_CURRENT_USER, 
              "Software\\screen-capture-recorder",
              0, KEY_WRITE, &hkey);


if(result_open != ERROR_SUCCESS) {
    if(result_open  == ERROR_FILE_NOT_FOUND) {
        printf("Not found\n");
    } else {
        printf("Error Opening Key\n");
    }
} else {
    printf("SUCCESS!!!\n");
}



 printf("Writing Value named capture_height\n");
 LONG result_write = RegSetValueEx(hkey, "capture_height", 0, szType, (LPBYTE)data, dwSize+1);
if(result_write != ERROR_SUCCESS) {
    printf("Error Writing Value\n");
} else {
    printf("SUCCESS!!!\n");
}

printf("Closing Key...\n");
result_close = RegCloseKey(hkey);
if(result_close != ERROR_SUCCESS) {
    printf("Error Closing Key\n");
} else {
    printf("SUCCESS!!!!\n");
}


return defaultVal;
}

【編】

$ gcc -L/local/lib -I/local/include -o readRegistry readRegistry.c

[走る]

$ ./readRegistry.exe
Opening Key...
SUCCESS!!!
Writing Value named capture_height
Error Writing Value
Closing Key...
SUCCESS!!!!

【登録前】

ここに画像の説明を入力

[編集1]

@Mat コメントについて:

エラー 998 が表示されます。Winerror.h

ERROR_NOACCESS 998L

[編集2]

私が実行すると:

LONG result_write = RegSetValueEx(hkey, "capture_height", 0, szType, (LPBYTE)"0x00000006", dwSize+1);

エラーは発生しませんが、レジストリにInvalid DWORD (32-bit) value.

私は使用しようとしました:

int32_t i;
i = 0x00000777; 
LONG result_write = RegSetValueEx(hkey, "capture_height", 0, szType, (LPBYTE)i, dwSize+1);

同じエラーが発生します

[編集3]

正しいインフラがあることを確認するために、いくつかのテストを実行します。

LONG result_write = RegSetValueEx(hkey, "capture_height1", 0, REG_SZ, (LPBYTE)"bobo", dwSizeI*2+1);

そして、REG_SZとして定義されたレジストリの正しい値「bobo」を取得します

4

2 に答える 2

1

4 番目のパラメーターが読み取られるようKEY_READに、呼び出しに追加してみてください。RegOpenKeyEx()KEY_READ | KEY_WRITE

[既存の値を更新するときに、読み取り許可も求める必要がある場合があります]

于 2013-08-09T15:30:46.890 に答える