如何获取用户单击按钮时打开的对话框的句柄 HWND。我正在使用 Spy++ 来查找窗口类和标题,但它说没有找到这样的窗口。然后如何使用 Win API 在 C++ 中获取该对话框的句柄?
我希望我能够使用 FindWindow、GetParent、任何 WIN APi 函数等简单函数来做到这一点。我不喜欢注入东西或加载 DLL。谢谢
更新:
文件夹浏览器对话框被其他程序打开。我想从不同的程序,我的程序中获取它的句柄。谢谢。我现在最需要的是函数 WindowFromPoint
可访问性将让您在没有 DLL 注入的情况下从其他进程捕获窗口创建事件。您可以修改示例以专门适应浏览窗口。这是我之前根据文章中的示例进行测试的示例。根据需要修改它:
#include <iostream>
#include <windows.h>
void CALLBACK proc(HWINEVENTHOOK hook, DWORD event, HWND hwnd, LONG obj, LONG child, DWORD thr, DWORD time) {
if (hwnd && obj == OBJID_WINDOW && child == CHILDID_SELF) {
switch (event) {
case EVENT_OBJECT_CREATE: {
std::cout << "Window created!\n";
break;
}
case EVENT_OBJECT_DESTROY: {
std::cout << "Window destroyed!\n";
break;
}
}
}
}
int main() {
HWINEVENTHOOK hook = SetWinEventHook(EVENT_OBJECT_CREATE, EVENT_OBJECT_DESTROY, nullptr, proc, 0, 0, WINEVENT_OUTOFCONTEXT | WINEVENT_SKIPOWNPROCESS);
MSG msg;
while (GetMessage(&msg, nullptr, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
if (hook) {
UnhookWinEvent(hook);
}
}