首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

怎么通过进程ID获取窗体句柄

2014-01-22 
如何通过进程ID获取窗体句柄做一个进程的守护, 在使用FindWindow得到窗体句柄的时候会失败,原因是程序运行

如何通过进程ID获取窗体句柄
做一个进程的守护, 在使用FindWindow得到窗体句柄的时候会失败,原因是程序运行后直接缩到托盘区了,这个时候FindWindow找不到。如果双击托盘图标让他那程序弹出界面,再缩回去就能找到句柄了。

SetLastError(0);
HWND handle = FindWindow("QWidget","顶层窗体名称");
int ErrorID = GetLastError();

如果handle为空,ErrorID也是0 没有原因

如果激活过窗体就能找到

所以能通过进程ID(OpenProcess返回值)获取到进程中的主窗体句柄的方法(也就是主线程句柄吧)网上找了有通过线程句柄获取进程句柄的(getwindowthreadprocessid)。没有找到这个,所以这个问题希望大家帮忙。


[解决办法]
在已获得进程ID的情况下,用系统快照 CreateToolhelpSnapshot TH32CS_SNAPTHREAD 列出指定进程的所有线程, 然后用 EnumThreadWindows 列出每个线程关联的窗口.

热点排行