背景:
在写一个应用,需要和系统窗口进行通讯,所以通讯数据要兼容32位和64位系统。
故事:
以为挺简单的一件事情,直接搜索“VC判断 64位系统”,搜到很多结果,但答案很一致,好像上学时候交的作业:
1 typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL); 2 3 LPFN_ISWOW64PROCESS fnIsWow64Process; 4 5 BOOL IsWow64() 6 { 7 BOOL bIsWow64 = FALSE; 8 9 //IsWow64Process is not available on all supported versions of Windows. 10 //Use GetModuleHandle to get a handle to the DLL that contains the function 11 //and GetProcAddress to get a pointer to the function if available. 12 13 fnIsWow64Process = (LPFN_ISWOW64PROCESS) GetProcAddress( 14 GetModuleHandle(TEXT("kernel32")),"IsWow64Process"); 15 16 if(NULL != fnIsWow64Process) 17 { 18 if (!fnIsWow64Process(GetCurrentProcess(),&bIsWow64)) 19 { 20 //handle error 21 } 22 } 23 return bIsWow64; 24 } 25
link:http://msdn.microsoft.com/en-us/library/windows/desktop/ms684139(v=vs.85).aspx
疑问:
我是想判断系统位数,咋取得一个系统函数名称里有单词process,还有个进程句柄做参数,系统属性怎么地也不能因进程不同传回不同信息吧。MSDN搜索该函数,会发现有这么一句
思考:
记得原来看到一篇MSDN博客上说Wow64是Window32 On Window64的简称,所以这个函数就是判断一个进程是不是处于这样情况:32 bit Window process On 64 bit Window。
那么为什么大家都说通过这个函数可以判断系统是否是64位呢?这个说法有一个前提,就是当前进程必须是32位进程:
32位进程在64位系统上反回TRUE
32位进程在32位系统上反回FALSE
64位进程在64位系统上反回FALSE
你会不会提出这样的疑问?文档上没有说64位进程在32位系统上返回情况;好吧,我刚开始也绕进去了,你可以重启一下大脑,32位系统无法运行64位进程。