0

如何获取用户单击按钮时打开的对话框的句柄 HWND。我正在使用 Spy++ 来查找窗口类和标题,但它说没有找到这样的窗口。然后如何使用 Win API 在 C++ 中获取该对话框的句柄?

我希望我能够使用 FindWindow、GetParent、任何 WIN APi 函数等简单函数来做到这一点。我不喜欢注入东西或加载 DLL。谢谢

更新:

文件夹浏览器对话框被其他程序打开。我想从不同的程序,我的程序中获取它的句柄。谢谢。我现在最需要的是函数 WindowFromPoint

4

1 回答 1

3

可访问性将让您在没有 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);
    }
}
于 2013-04-04T19:31:43.113 回答