通过进程名获取 窗口句柄

通过进程名获取 窗口句柄HWNDFindMainWindow(unsignedintprocessID){structHANDLE_DATA{unsignedintprocessID;HWNDhandle;}data;data.processID=processID;data.handle=0;staticautoIsMainWindow=[](HWNDhandle)->BOOL{.

大家好,又见面了,我是你们的朋友全栈君。

HWND FindMainWindow(unsigned int processID)
{
    struct HANDLE_DATA {
        unsigned int processID;
        HWND handle;
    } data;
    data.processID = processID;
    data.handle = 0;

    static auto IsMainWindow=[](HWND handle)->BOOL
    {
        return GetWindow(handle, GW_OWNER) == (HWND)0 && IsWindowVisible(handle);
    };

    static auto EnumWindowsCallback=[](HWND handle, LPARAM lParam)
    {
        HANDLE_DATA& data = *(HANDLE_DATA*)lParam;
        unsigned long process_id = 0;
        GetWindowThreadProcessId(handle, &process_id);
        if (data.processID != process_id || !IsMainWindow(handle)) {
            return TRUE;
        }
        data.handle = handle;
        return FALSE;
    };

    EnumWindows(EnumWindowsCallback, (LPARAM)&data);

    return data.handle;
}

DWORD GetProcessID(const char *ProcessName)
{
    PROCESSENTRY32 pe32;
    pe32.dwSize = sizeof(PROCESSENTRY32);

    //获取进程快照
    HANDLE hProcessSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    if (hProcessSnap == INVALID_HANDLE_VALUE)
    {
        //   qDebug("CreateToolhelp32Snapshot 调用失败.");
        return -1;
    }

    //遍历进程快照,轮流显示每个进程的信息
    BOOL bMore = ::Process32First(hProcessSnap, &pe32);
    while (bMore)
    {
        // qDebug("进程名称:%ls", pe32.szExeFile); //这里得到的应该是宽字符,用%ls,不然无法正常打印
        // qDebug("进程ID:%u", pe32.th32ProcessID);
        if ( QString( pe32.szExeFile ) == ( ProcessName ) )
        {
            qDebug("进程名称:%ls", pe32.szExeFile);
            qDebug("进程ID:%u", pe32.th32ProcessID);
            qDebug("pcPriClassBase :%u", pe32.pcPriClassBase);
            qDebug("th32ParentProcessID :%u", pe32.th32ParentProcessID);
            qDebug("cntThreads :%u", pe32.cntThreads);
            break;
        }

        bMore = ::Process32Next(hProcessSnap, &pe32);
    }

    //不要忘记清除掉snapshot对象
    ::CloseHandle(hProcessSnap);

    return pe32.th32ProcessID;
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/162554.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • undefined pthread_create_android studio has stopped

    undefined pthread_create_android studio has stopped最近在DebugAndroid工程时,发现真机直接崩溃闪退,但直接run则没问题,debug闪退日志报错:Dumpingallthreadswithoutappropriatelocksheld:threadlistlockmutatorlock,之前调试还是好好的,为什么突然就不行了呢?具体日志如下:12-0710:37:05.736:I/System

    2022年9月12日
    3
  • 开放6379端口

    开放6379端口开放6379端口/sbin/iptables-IINPUT-ptcp–dport6379-jACCEPT保存配置/etc/rc.d/init.d/iptablessave转载于:https://www.cnblogs.com/itniwota/p/9138347.html

    2022年6月2日
    41
  • 按位取反运算符_按位取反运算符的运算举例

    按位取反运算符_按位取反运算符的运算举例一、定义取反操作符是位运算符的中一个,作用是按位补运算符翻转操作数的每一位。二、举例说明正数:~(6)6的二进制表示00000110按位取反11111001说明:在计算机中,正数用

    2022年8月1日
    3
  • db4o发布7.2,出现.NET 3.5版本,支持LINQ「建议收藏」

    db4o发布7.2,出现.NET 3.5版本,支持LINQ「建议收藏」db4o发布7.2,出现.NET3.5版本,支持LINQDb4Object刚刚发布了db4o的7.2beta,除了以前支持如下的平台:.NET1.1,.NET2.0,Mono外,现在还支持.NET3.5了。当然支持.NET3.5,最主要的时候要来支持LINQ。关于LINQ,我稍后再讲。现在讲讲7.2中最大的新特性——TransparentActivation(透明…

    2022年7月21日
    13
  • pycharm设置c语言注释颜色,pycharm设置注释颜色的方法[通俗易懂]

    pycharm设置c语言注释颜色,pycharm设置注释颜色的方法[通俗易懂]pycharm设置注释颜色的方法操作方法如下所示:File–>Settings–>Editor–>Color&Fonts–>LanguageDefaults–>Linecomment–>设置颜色即可以上这篇pycharm设置注释颜色的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。时间:2018-05-22…

    2022年8月25日
    5
  • 初学TypeScript之接口定义

    初学TypeScript之接口定义TypeScript入门(2)前面讲了如何使用TypeScript和TypeScript的数据类型有哪些,这一章就讲解TypeScript的接口。如果不知道如何写TypeScript的朋友或者不知道TypeScript的数据类型有哪些的朋友可以转至TypeScript的使用以及数据类型详解处观看。接口:简介:TypeScript的核心原则是对值所具有的结构进行类型检查。在TypeSc…

    2022年5月1日
    71

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号