x64 용 C# 응용 프로그램을 작성하고 있습니다. 내 문제는 입니다. 특정 키워드 인이 들어있는 키를 레지스트리에서 검색하고 있습니다. 검색 만 가능합니다. 레지스트리 리디렉션 때문에 x64 응용 프로그램의 레지스트리
나는 그물에 어떤 부호를 찾아 낼 것을 도왔다 그러나 나는 나가 패턴 또는 키워드를 찾는 동안 나는 정확한 열쇠 이름을 알고있는 경우에만 그것이 작동하는 것을 이해하기 때문에 그것으로 무엇을 해야할지 모른다. [같이 DllImport ("advapi32.dll의"의 EntryPoint = "RegOpenKeyEx") (을 IntPtr phkResult 아웃 UIntPtr HKEY, 문자열 하위 키 UINT 옵션 INT 샘 ) 공용 static 통근 용의 INT RegOpenKeyEx_DllImport;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)를 사용합니다. – tyranid
위대해, 고마워! 그게 효과가있어, 내가 어떻게 당신의 코멘트를 정답으로 표시합니까? – trebor
트릭이'KEY_WOW64_32KEY' 상수를 사용하고 있습니다. 앞으로는 인터넷과 관련이없는 임의의 코드가 아닌 실제 사용중인 코드를 게시하는 것이 좋습니다. –