VC++技巧
原文链接 http://chaosky.me/2014/10/11/VC-tips/
注:以下为加速网络访问所做的原文缓存,经过重新格式化,可能存在格式方面的问题,或偶有遗漏信息,请以原文为准。
Windows API
FindWindow
- 函数功能:该函数获得一个顶层窗口的句柄,该窗口的类名和窗口名与给定的字符串相匹配。这个函数不查找子窗口。在查找时不区分大小写。
- 函数原型:
HWND FindWindow(LPCTSTR IpClassName,LPCTSTR IpWindowName);
- 参数:
IpClassName
:指向一个指定了类名的空结束字符串,或一个标识类名字符串的成员的指针。如果该参数为一个成员,则它必须为前次调用theGlobafAddAtom
函数产生的全局成员。该成员为16位,必须位于IpClassName
的低 16位,高位必须为 0。IpWindowName
:指向一个指定了窗口名(窗口标题)的空结束字符串。如果该参数为空,则为所有窗口全匹配。 - 返回值:如果函数成功,返回值为具有指定类名和窗口名的窗口句柄;如果函数失败,返回值为NULL。这个函数有两个参数,第一个是要找的窗口的类,第二个是要找的窗口的标题。在搜索的时候不一定两者都知道,但至少要知道其中的一个。有的窗口的标题是比较容易得到的,如"计算器",所以搜索时应使用标题进行搜索。但有的软件的标题不是固定的,如"记事本",如果打开的文件不同,窗口标题也不同,这时使用窗口类搜索就比较方便。如果找到了满足条件的窗口,这个函数返回该窗口的句柄,否则返回0。也可以通过
SendMessage(hwnd, WM_CLOSE, NULL, NULL);
来关闭窗口。
GetWindowThreadProcessId
- 函数功能:在得到窗口句柄后我们可以通过GetWindowThreadProcessId这个函数来获得窗口所属进程ID和线程ID,从而判断创建窗口的进程和线程。
- 函数原型:
DWORD GetWindowThreadProcessId(HWND hWnd,LPDWORD lpdwProcessId);
- 参数:
hWnd
:传入的窗口句柄;lpdwProcessId
:返回的进程ID地址。 - 返回值:函数返回的是窗口所属线程ID。
这个函数可以结合
FindWindow
共同使用。通过FindWindow
查找窗口句柄。