在我们的代码中,可能要判断某个窗口是否由shell32、cprog、tmail或connmgr进程创建的。由于这几个进程都会创建数个很具有特征意义的窗口,比如:shell32进程会创建DesktopExplorerWindow和HHTaskBar等窗口,故这个问题就可简化为判断两个窗口是否由同一进程创建。
在头文件wpcpriv.h中,存在未归档Win32 API函数SHSameWindowProcesses,可用来判断两个窗口是否由同一进程创建。其函数原型声
明如下:
//++++++
//
// SHSameWindowProcesses
//
// Return TRUE if hwnd1 and hwnd2 are in the same process.
BOOL WINAPI SHSameWindowProcesses(HWND hwnd1, HWND hwnd2);
使用该函数需要链接导入库aygshell.lib。
如果读者手头没有AKU或者觉得相关导入库使用不方便,可使用如下C/C++代码实现:
该函数的实质是通过调用GetWindowThreadProcessId()获取创建该窗口的进程ID,然后比较两个进程ID是否相同来实现。
对于本文开头提到的判断某窗口是否由shell32进程创建,可用如下代码段表示:
SHSameWindowProcesses(hwnd, GetDesktopWindow());