在windwos核发编程第5 版中,Jeff. 使用下面的代码查找桌面窗口
HWND hWndLV = GetFirstChild(GetFirstChild(
FindWindow(TEXT("ProgMan"), NULL)));
在win 7下此代码不起作用,可以用Spy++ 查看,确实还有ProgMan,但不是桌面的父窗口。
我们用下面的方法
EnumWindows(EnumWindowsProc, (LPARAM)&hWndLV);
该函数具体实现如下,
BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam){
if(hwnd)
{
TCHAR classname[128];
GetClassName(hwnd, classname, 128);
if(!_tcscmp(classname, _T("WorkerW") ) )
{
HWND &hWndLV = *(HWND *)lParam;
TCHAR childClassName[128];
HWND hChildWnd = GetWindow(hwnd, GW_CHILD);
while(hChildWnd)
{
GetClassName(hChildWnd, childClassName, 128);
if(!_tcscmp(childClassName, _T("SHELLDLL_DefView")))
hWndLV = GetFirstChild(hChildWnd);
chASSERT(IsWindow(hWndLV));
return false;
}
}
}
return true;
}
本文介绍了一种在Windows 7环境下获取桌面窗口句柄的方法。针对原有方法失效的问题,通过枚举窗口并筛选特定类名的方式成功定位到桌面窗口。
1986

被折叠的 条评论
为什么被折叠?



