概述
根据一个窗口句柄,检查这个窗口所在的进程是32位还是64位。
/*
* WOW64 (Windows-on-Windows 64-bit)是一个Windows操作系统的子系统,
* 它为现有的 32 位应用程序提供了 32 位的模拟,可以使大多数 32 位
* 应用程序在无需修改的情况下运行在 Windows 64 位版本上。
*/
typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL);
BOOL IsWow64(HANDLE hProcess)
{
BOOL bIsWow64 = FALSE;
LPFN_ISWOW64PROCESS fnIsWow64Process = (LPFN_ISWOW64PROCESS)GetProcAddress(GetModuleHandle(TEXT("kernel32")), "IsWow64Process");
if (NULL != fnIsWow64Process)
{
if (!fnIsWow64Process(hProcess,&bIsWow64))
{
// handle error
}
}
return bIsWow64;
}
/*
* 检查窗口所在进程的位数
* 返回值:
* true : 64位程序
* false : 32位程序
*/
bool Is64Wnd(HWND hWnd)
{
DWORD processId;
DWORD dwThreadId = GetWindowThreadProcessId(hWnd, &processId);
if (!dwThreadId)
return false;
HANDLE hProcess = ::OpenProcess(PROCESS_ALL_ACCESS, FALSE, processId);
if(!hProcess)
return false;
bool result = (TRUE == IsWow64(hProcess)) ? false:true;
::CloseHandle(hProcess);
return result;
}