通过进程名获取主框架窗口句柄
来源:互联网 发布:云骐网络 编辑:程序博客网 时间:2024/05/21 12:45
转自:http://my.csdn.net/tudou23115/code/detail/21236
#include "tchar.h"#include <atlconv.h>#include <TlHelp32.h>#include <winnt.h>
//定义一个进程ID和窗口句柄的结构体typedef struct tagWNDINFO{ DWORD dwProcessId; HWND hWnd;} WNDINFO, *LPWNDINFO; //枚举回调函数BOOL CALLBACK EnumWindsProc(HWND hWnd,LPARAM lParam){ DWORD dwProcessId; //通过窗口句柄获取进程ID GetWindowThreadProcessId(hWnd, &dwProcessId); LPWNDINFO pInfo = (LPWNDINFO)lParam; //匹配遍历窗口进程号与通过进程名得到的进程号 if(dwProcessId == pInfo->dwProcessId) {pInfo->hWnd = hWnd;//返回找到的窗口句柄 return FALSE; } return TRUE;}int GFindWindows(LPCTSTR proc_name,HWND *bufs, int buf_len){ int num=0;//返回的窗口句柄数目 DWORD dwPID = 0; //一个临时PID int a[MAX_PATH];//存放进程PID的数组 DWORD Proc_num=0;//进程数量 //************************根据进程名称获取进程ID***********// HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if (INVALID_HANDLE_VALUE == hSnapshot) { return 0; } PROCESSENTRY32 pe = { sizeof(pe) }; BOOL fOk; for (fOk = Process32First(hSnapshot, &pe); fOk; fOk = Process32Next(hSnapshot, &pe)) { if (!wcscmp(pe.szExeFile, proc_name)) { a[Proc_num]= pe.th32ProcessID; Proc_num++; } } //进程数量为0 提示找不到进程 返回为0; if (Proc_num==0) { bufs=NULL; buf_len=0; return 0; }else//找到一个匹配进程 { //对一个进程名有多个相同进程ID的全部数组进行处理 for (int j=0;j<Proc_num;j++) { WNDINFO *wi=new WNDINFO; wi->dwProcessId =a[j];//将获取到的进程ID传给结构体 wi->hWnd = NULL; //遍历顶层窗口获取窗口句柄 EnumWindows(EnumWindsProc,(LPARAM)wi); HWND re_hwnd = wi->hWnd; while( GetParent(re_hwnd) != NULL )//循环查找父窗口,以便保证返回的句柄是最顶层的窗口句柄 { re_hwnd = GetParent( re_hwnd ); } //比较设定的大小与设计大小 if (num<buf_len) { //判断当前进程是否无窗口 无窗口句柄则不保存 if (wi->hWnd!=NULL) {bufs[num]=re_hwnd;num++; } } }//end for (int j=0;j<Proc_num;j++) return num;//返回句柄个数 }}
描述:通过进程名获取主框架窗口句柄,由于只知道某个程序的进程名,用FindWindow()也可以获取到窗口的句柄但是窗口的标题有可能是不是在发生变化,顾不可靠,还有一点就是,有可能一个进程没有窗口,也可能有多个窗口(包括子窗口,Dll窗口,二级子窗口等等)。
- 通过进程名获取主框架窗口句柄
- 通过进程名获取窗口句柄
- 通过进程名或进程ID获取进程句柄,窗口句柄
- C++通过进程名获取进程句柄
- 通过进程ID获取进程主窗口句柄
- AutoIt3 使用进程名获取窗口句柄
- 通过进程获取窗口的句柄
- 通过进程获取窗口的句柄
- 通过进程Id获取窗口句柄
- 通过进程id获取窗口句柄
- 通过进程exe名称获取窗口句柄
- 通过Windows进程ID获取窗口句柄
- VC++ 通过进程名或进程ID获取进程句柄
- VC++ 通过进程名或进程ID获取进程句柄
- 通过进程ID获得主窗口句柄
- 通过进程ID获得主窗口句柄
- 通过进程找到主窗口的句柄
- 获取进程名,获取进程路径,获取当前进程的窗口句柄。
- (转载)java工程师15本必读书籍推荐
- 我的IT从业心得
- 造成segment fault,产生core dump的可能原因
- mysql 5.6 新特性收录
- 10986 - Sending email//Bellman-Ford
- 通过进程名获取主框架窗口句柄
- poj - 3740 - Easy Finding(精确覆盖DLX)
- hdu1792
- hdu 1992
- MSI-HOWTO
- Chat_10
- oracle之归档模式小结
- 自旋锁(spinlock) 解释得经典,透彻
- .体验百度安全管家—看它如何防吸费