美文网首页我爱编程
检查一个窗口所属进程是否是64位程序

检查一个窗口所属进程是否是64位程序

作者: 火星凯撒 | 来源:发表于2018-04-16 17:07 被阅读0次

    概述

    根据一个窗口句柄,检查这个窗口所在的进程是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;

    }

    相关文章

      网友评论

        本文标题:检查一个窗口所属进程是否是64位程序

        本文链接:https://www.haomeiwen.com/subject/sbmekftx.html