如何获得一个已经运行起来,但是仅知道进程名称,没有窗口标题,与调用程序没有特殊关系(如父子关系),并且其它条件(如是否置顶)任意的应用程序的窗口句柄????
加头文件:#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++程序员之家
本文链接地址: 进程名称获取窗口句柄