在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;
}