x64用のC#アプリケーションを作成していますが、私の問題はです。特定のキーワードを含むいくつかのキーをレジストリで検索しています。レジストリリダイレクトのためにx64アプリケーションのレジストリ。
私はネット上でいくつかのコードを見つけましたが、パターンやキーワードを検索している間は正確なキー名がわかっていると分かりますから、実際に何をするべきか分かりません。 [DLLIMPORT( "のAdvapi32.dll"、エントリーポイント= "のRegOpenKeyEx")] パブリック静的にextern int型RegOpenKeyEx_DllImport( UIntPtr HKEY、 ストリングサブキー、 UINTオプション、 INTサムのIntPtr phkResultアウト )。x32プログラムからx32レジストリキーを検索する
[DllImport("advapi32.dll", EntryPoint = "RegQueryValueEx")]
static extern int RegQueryValueEx_DllImport(
IntPtr hKey,
string lpValueName,
int lpReserved,
out uint lpType,
System.Text.StringBuilder lpData,
ref uint lpcbData);
public string GetKeyValue(string strSubKey, string strKey)
{
UIntPtr HKEY_LOCAL_MACHINE = (UIntPtr)0x80000002;
const int KEY_WOW64_32KEY = 0x0200;
const int KEY_QUERY_VALUE = 0x1;
IntPtr hKeyVal;
uint lpType;
uint lpcbData = 0;
System.Text.StringBuilder pvData = new System.Text.StringBuilder(1024);
int valueRet;
string returnPath = String.Empty;
unchecked
{
try
{ //Open the required key path
valueRet = RegOpenKeyEx_DllImport(HKEY_LOCAL_MACHINE, strSubKey, 0, KEY_QUERY_VALUE | KEY_WOW64_32KEY, out hKeyVal);
//Retreive the key value
valueRet = RegQueryValueEx_DllImport(hKeyVal, strKey, 0, out lpType, pvData, ref lpcbData);
valueRet = RegQueryValueEx_DllImport(hKeyVal, strKey, 0, out lpType, pvData, ref lpcbData);
returnPath = pvData.ToString();
}
catch (Exception e)
{
throw (e);
}
}
return returnPath;
}
.net 4を対象としている場合は、マネージコードで32ビットレジストリを指定できる新しい機能が追加されました。 OpenBaseKey(http://msdn.microsoft.com/en-us/library/microsoft.win32.registrykey.openbasekey.aspx)を使用して、適切なRegistryViewを指定します。 – tyranid
よかった、ありがとう!うまくいきました。あなたのコメントを正解とするにはどうすればいいですか? – trebor
このトリックは 'KEY_WOW64_32KEY'定数を使用しています。将来的には、あなたの問題とは何の関係もないインターネットからのランダムなコードではなく、実際に使用しているコードを投稿することを検討してください。 –