昨晚上一位朋友问我如何获取桌面句柄,当时第一反应就是用GetDesktopWindow()来获取,但是这个函数获取的是覆盖整个屏幕的句柄,如果只获取桌面的句柄,则不能使用这个函数。
通过Spy++发现,桌面其实是一个子窗口,其上面有两个父窗口 如图:
这三个窗口都没有标题,它们的类名分别为:Progman、SHELLDLL_DefView和SysListView32;这就好办了,只需要获取到Progman的句柄,再获取它的子窗口的子窗口就是桌面句柄,代码如下:
HWND hWnd = FindWindow("Progman", NULL);
hWnd = GetWindow(hWnd, GW_CHILD);
hWnd = GetWindow(hWnd, GW_CHILD);
这样就可以获取到桌面句柄了。