浏览文件夹对话框窗口句柄C ++

时间:2013-04-04 18:45:38

标签: c++ winapi

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

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

更新

其他程序打开文件夹浏览器对话框。我希望从不同的程序,我的程序中得到它。谢谢。 我想要的最接近的是功能WindowFromPoint

1 个答案:

答案 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);
    }
}