Вот обратный вызов, который вы можете использовать с EnumWindows ():
BOOL CALLBACK FindTopmostWnd(HWND hwnd, LPARAM lParam)
{
HWND* pHwnd = (HWND*)lParam;
HWND myParent = hwnd;
do
{
myParent = GetParent(myParent);
}
while (myParent && (myParent != *pHwnd));
if (myParent != 0)
{
// If the window is a menu_worker window then use it's parent
TCHAR szClassName[7];
while (0 != GetClassName(hwnd, szClassName, 7)
&& 0 != _tcsncmp(szClassName, TEXT("Dialog"), 6)
&& 0 != _tcsncmp(szClassName, TEXT("Afx"), 3)
)
{
// find the worker's parent
hwnd = GetParent(hwnd);
}
*pHwnd = hwnd;
return FALSE;
}
return TRUE;
}
Как указывает Адам, LPARAM, передаваемый в EnumWindows (), должен быть указателем на HWND. Так что вы, вероятно, хотите сделать что-то вроде этого:
HWND hTopmostWnd = hWnd;
EnumWindows(FindTopmostWnd, (LPARAM)&hTopmostWnd);