通过进程名获取 窗口句柄

通过进程名获取 窗口句柄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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 数据挖掘应用实例分析

    数据挖掘应用实例分析数据挖掘应用实例分析——个性化推荐系统​ 数据挖掘技术,一门基于计算机技术与大数据时代信息处理需求的技术产物,从世纪之交的火热发展以来,不知不觉间,早已应用到我们生活的方方面面:电子邮箱中的垃圾邮件分类、电影院的票房预测、网页上的广告推荐、语音识别、电网语义精确搜索等。还有人工智能、自然语言处理、数据修正等。我们认为,数据挖掘技术将成为互联网时代应用最广泛的技术之一,它有可能为人类社会带来一个新的时代。​ 但是由于笔者才疏学浅,今天我们暂不谈得那么高深,只分析的一个常见的应用实例——个性化推荐系统。

    2022年6月15日
    28
  • Nginx+PHP(laravel) 环境 499 错误码排查过程小记

    Nginx+PHP(laravel) 环境 499 错误码排查过程小记

    2022年2月17日
    41
  • 通用权限管理组件

    通用权限管理组件

     
     
    整体数字化建设项目
    QQ群:42706992一起学习
    ASP.NETC#.NET
    通用权限管理组件
    使用说明书
     
     

     
     
     
     
     
     
                      开发单位:技术研发部
                编制日期:2010年10月
     

    2022年6月16日
    23
  • 计算机桌面锁写快捷,锁定计算机快捷键_锁定计算机的快捷键

    计算机桌面锁写快捷,锁定计算机快捷键_锁定计算机的快捷键2017-01-0515:11:14当有事需暂时离开,又不想他人动用电脑时,可采取锁定桌面的办法。1、首先要在电脑中设置好一个用户帐户密码(开机密码)。在锁定桌面时,只需按Win十L键(即按住那个有微软视窗图标的键…2016-12-1814:43:081在电脑上键盘上找到Windows键和L键,这两个键就是快速锁定计算机的关键所在步骤阅读2两只手一只手按Windows键,另一只手按L键,…

    2022年7月21日
    12
  • java8中的map与flatmap

    java8中的map与flatmap问题假如我们有这样一个需求给定单词列表[“Hello”,”World”],你想要返回列表[“H”,”e”,”l”,”o”,”W”,”r”,”d”],如果我们使用java实现这个需求,你会怎么实现呢?可能我们第一个想法是下面这种写法:words.stream().map(word->word.split(“”)).distinct().collect(toList());但是如果我们运行会发现这样的写法是不正确的,这个方法的问题在于,传递给map方法的Lambda为每个单词返回

    2022年6月4日
    54
  • c语言sigaction,使用sigaction(),c[通俗易懂]

    c语言sigaction,使用sigaction(),c[通俗易懂]让我们试着了解修改后的代码版本会发生什么:#include#includevoidtermination_handler(intsignum){printf(“Hellofromhandler\n”);sleep(1);}intmain(void){//Structsthatwilldescribetheoldactionandthenewaction//ass…

    2022年5月26日
    43

发表回复

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

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