IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    进程名称获取窗口句柄

    admin发表于 2015-03-13 07:06:11
    love 0

    如何获得一个已经运行起来,但是仅知道进程名称,没有窗口标题,与调用程序没有特殊关系(如父子关系),并且其它条件(如是否置顶)任意的应用程序的窗口句柄????

    加头文件:#include “tlhelp32.h”

    C++代码现成如下,感谢分享者,注释添加:C++程序员之家:

    HWND MyProc::GetXHandle(CString procName)  //procName 被调用进程名称
    {
        DWORD iProcID=0;
        PROCESSENTRY32 pEntry={sizeof(PROCESSENTRY32)};
        HANDLE hSnapshot=CreateToolhelp32Snapshot(TH32CS_SNAPALL,0);//获得进程快照
        if(hSnapshot!=INVALID_HANDLE_VALUE)
        {
            if(Process32First(hSnapshot,&pEntry))
            {
                while (Process32Next(hSnapshot, &pEntry))//遍历进程
                {
                    if(lstrcmpi(procName, pEntry.szExeFile) == 0)//查到相应进程
                    {
                        iProcID=pEntry.th32ProcessID;//获取进程ID
                        CloseHandle(hSnapshot);
                        break;
                    }
                }
            }
        }    
    
        HWND hwnd=::GetTopWindow(NULL);//z序顶部窗口句柄
        while(hwnd)
        {
            DWORD pid=0;
            DWORD dwProcessId=GetWindowThreadProcessId(hwnd,&pid);//获取进程ID
    
            if(dwProcessId!=0)
            {
                if(pid==iProcID)//判断进程ID是否相当
                {
                    return hwnd;//获得句柄
                }
            }
            hwnd=::GetNextWindow(hwnd,GW_HWNDNEXT);//返回z序中的前一个或后一个窗口的句柄
        }
        return NULL;
    }

     知识来源:[and_tt的博客]

    原创文章,转载请注明: 转载自C/C++程序员之家

    本文链接地址: 进程名称获取窗口句柄



沪ICP备19023445号-2号
友情链接