Winapi 如何从对话框中查找禁用的父窗口
我在IE中有一个页面呈现,它创建了一个样式为WS_POPUP-showModalDialog的模型对话框。我可以找到对话框的HWND,但如何才能找到父级的HWND? 由于“模型”对话框及其父级在不同的进程上运行,因此API函数getParent不起作用。此外有时另一个窗口可能位于对话框和父页面之间,这会阻止我使用“下一个窗口”: 没有代码,API函数getParent不起作用也没有帮助。您应该在属性->窗口中使用Spy++父值进行检查 请同时查看中的备注部分 要获取窗口的所有者窗口,请使用带有GW_所有者标志的GetWindow,而不是使用GetParent。要获取父窗口而不是所有者,请使用带有GA_parent标志的get祖先,而不是使用GetParent 你写了: 另外!!有时,另一个窗口可能位于对话框和父页面之间 这可能表明你没有真正的所有者关系。也许只有禁用所有者窗口并使对话框位于最顶端才能模拟它。您可以使用Spy++在Properties->Styles中查找WS_EX_TOPMOST来验证这一点。使用HideThatWindow应用程序,您可以在运行时操纵窗口样式,并进一步确认这一点 为了获得HWND,我会将自定义消息从一个窗口发布到另一个窗口Winapi 如何从对话框中查找禁用的父窗口,winapi,modal-dialog,Winapi,Modal Dialog,我在IE中有一个页面呈现,它创建了一个样式为WS_POPUP-showModalDialog的模型对话框。我可以找到对话框的HWND,但如何才能找到父级的HWND? 由于“模型”对话框及其父级在不同的进程上运行,因此API函数getParent不起作用。此外有时另一个窗口可能位于对话框和父页面之间,这会阻止我使用“下一个窗口”: 没有代码,API函数getParent不起作用也没有帮助。您应该在属性->窗口中使用Spy++父值进行检查 请同时查看中的备注部分 要获取窗口的所有者窗口,请使用带有G
UINT MyWmMessage = RegisterWindowMessage( TEXT( "HereIsMyHWND.mydomainname.pl" ) );
...
PostMessage( DialogHWND, MyWmMessage, 0, (LPARAM) ParentHWND );
和在对话框窗口中:
// If this is in another process, reregister custom message.
UINT MyWmMessage = RegisterWindowMessage( TEXT( "HereIsMyHWND.mydomainname.pl" ) );
...
LRESULT CALLBACK DialogWindowProc( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam )
{
...
if ( msg == MyWmMessage )
{
WeGotParentHWND = (HWND) lparam;
}
...
}
简短回答:这是一种“如果你还不知道后果是什么,那么你就没有足够的智慧去正确地做”的事情。