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

概述

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

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • ## 可重入函数 ### 可重入性的理解 若一个程序或子程序可以安全的被并行执行,则称其为可重入的;即当该子程序正...
    夏至亦韵阅读 4,046评论 0 0
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,833评论 19 139
  • 一、关于生活方面: (1)完成晨路10公里,并坚持听《精英日课》 2、关于读书与自我迭代方面: (1)保证收听专栏...
    清风_bd61阅读 2,507评论 0 0
  • JAVA面向对象——四大特征 继承篇——extendsJava 继承继承的概念继承是java面向对象编程技术的...
    那你diss我好了阅读 2,507评论 0 0
  • 什么都不想做,除了想哭
    那些阳光不灿烂的日子阅读 1,477评论 0 0

友情链接更多精彩内容