【解決方法】レジストリからアイテムを読み取る方法 "ハ".


私がやろうとしているのは、単純なことです。 レジストリからアイテムを読み取るようなものです。 ちょっと待ってください!
例: (HKEY_CURRENT_USER) のドメインの下にあるレジストリ アドレス (\SOFTWARE\Acer\Hermes) を指定すると、
アイテムのレジストリ アドレスの下にあるアイテム情報を読み取り/取得しようとしました。 レジストリ アドレスを開くことはできますが、項目を読み取るには、
は心が痛む経験でした。 私は RegenumValue ではなく、GetRegValue、RegQueryValueEx を使用してきました。
それらの間の。 これらすべての呼び出しの最終結果は、エラー コード 2(two) でした。 そして、はい、私は言われた規則に従おうとしてきました。
そして、それは非常にイライラするプロセスでした。 エラーコード2(2)について私が見つけた定義から、MSはそれに意味を与えます
「FILE_NOT_FOUND」の。 ファイルが見つかりません???? 次のようなレジストリ関数でレジストリを開くことができます: RegOpenKeyExA または RegCreateKeyExA
そしてうまくやった。 私が使用する「C」コードを含めます。 はい、コードに過去の作業試行を残しました。これは、過去に失敗したさまざまな試行を示しています。
私の多くの欲求不満を許してください。 誰かが私を正しい道に戻し、これが正しく機能するのを手伝ってくれませんか。 しかし、前もって感謝します。
そして、この「関数の最終結果を取得して、ゼロ(0)のエラーコードを残してください…
そして再び、大きな感謝!.
(メンバー 15028314) … あ、これは学校の宿題じゃないです。

私が試したこと:

C++
///GetRegStrValue 
int GetRegStrValue(char * keyaddress, char * keypeople, char * retsname, int idlocate) {
////	Dim retval$, hSubKey As Long, dwType As Long, sz As Long

#define SBUFFER 8192
    char value[255];
    DWORD BufferSize = SBUFFER;
    int iretval, rv, iwhloc = 2345, iwhch = 1;
    long lrv, rv1,irv;
    char defaultvalue[12];
	HKEY hSubKey = NULL;
    char buffer[100]; 
	DWORD DWbufsize;
    strcpy(defaultvalue, "XXXXX");
////    strcpy(buffer, "\0");
#define MAX_VER_LEN 255 
    DWORD data_len = MAX_VER_LEN;
    char new_data[MAX_VER_LEN];

///    REGSAM flagz = KEY_QUERY_VALUE | KEY_ENUMERATE_SUB_KEYS; 
    iretval = 0;
    lrv = RegOpenKeyExA(HKEY_CURRENT_USER, keyaddress, 0, KEY_READ | KEY_WRITE | KEY_WOW64_64KEY, &hSubKey);
    if (lrv != ERROR_SUCCESS) {
        lrv = RegCreateAddSetString(keyaddress, keypeople, defaultvalue, iwhch, iwhloc);
    }
	if (lrv == ERROR_SUCCESS) {
        RegCloseKey(hSubKey);   ////  somewhere in this area, an exception unhandler was thrown...
        //if (isWin64Bit()) flagz |= KEY_WOW64_64KEY;
        //else flagz |= KEY_WOW64_32KEY;
        lrv = RegOpenKeyExA(HKEY_CURRENT_USER, keyaddress, 0, KEY_READ | KEY_WRITE, &hSubKey);
        strcpy(buffer, "\0");
        strcpy(new_data, "\0");
        ///  OK TO HERE...                  //// | RRF_SUBKEY_WOW6464KEY
///------------------------------------------

        lrv = RegGetValue(hSubKey, NULL, (LPCWSTR)keypeople, RRF_RT_REG_SZ , NULL, (PVOID)&new_data, &data_len);
//// this above sentence is giving me major grief!!    

       //rv1 = RegQueryValueEx(hSubKey, (LPCWSTR)keypeople, NULL, &type, 0, &nbytes);
        ///// 
        ///results = (char*)malloc(nbytes + 1);
        ///lrv = RegQueryValueEx( hSubKey,  (LPCWSTR)keypeople, NULL, &type, (BYTE*)buffer, &DWbufsize );

		if (lrv == ERROR_SUCCESS) {    //// Exception Unhandled thrown approx here.. 
			RegCloseKey(hSubKey);   ////  somewhere in this area, an exception unhandler was thrown...
			iretval = 1;
///			strcpy(retsname, results);
            ///            printf(" *K IN*  GetRegStrValue, %d,   <%s>   \n", strlen(results), results);
            printf(" ***  GetRegStrValue, %d,   <%s>   \n", strlen( (char *)buffer), buffer);
        }
		else {   
			iretval = -2;
			rv = ReportErrorString(lrv, idlocate);
		}   ///  <error-type> hSubKey /// exception Unhandled has been thrown here.   located?? at "return(iretval);  
	}
	else { 
		iretval = -3;
		rv = ReportErrorString(lrv,idlocate);
	}
	return(iretval);
 }
/////////------------------------------------

解決策 1

一部の関数は定義されていないようです。 ただし、次のように動作します。

TCHAR* lpSubKey = _T("SOFTWARE\\Logitech");
HKEY hSubKey = NULL;

LSTATUS lrv = RegOpenKeyExW(HKEY_CURRENT_USER, lpSubKey, 0, KEY_READ | KEY_WRITE | KEY_WOW64_64KEY, &hSubKey);

コメント

タイトルとURLをコピーしました