如何获取用户在单击按钮时打开的对话框的HWND。 我正在使用Spy ++来查找窗口类和tittle,但它说没有找到这样的窗口。然后如何使用Win API在C ++中获取该对话框的句柄?
我希望我能够使用FindWindow,GetParent和任何WIN APi函数这样的简单函数来做到这一点。我不喜欢注入东西或加载DLL。感谢
更新
其他程序打开文件夹浏览器对话框。我希望从不同的程序,我的程序中得到它。谢谢。 我想要的最接近的是功能WindowFromPoint
答案 0 :(得分:3)
Accessibility将允许您从其他进程捕获窗口创建事件而无需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);
}
}