Jigberto
Jigberto

Reputation: 1533

Browse For Folder dialog window handle C++

How to get the handle HWND of the dialog which user open when clicking on a button. I'm using Spy++ to find the window class and tittle, but it says that no such window is found. And how then to get the handle of that dialog in C++ using Win API ?

I hope that I will be able to do that using simple functions as FindWindow, GetParent, any WIN APi function. I do not like to inject something or load DLL. Thanks

UPDATE:

the folder browser dialog is opened by other program. I want to get it's handle from different program , my program. Thanks. The closest to want i need is for now the function WindowFromPoint

Upvotes: 0

Views: 967

Answers (1)

Qaz
Qaz

Reputation: 61970

Accessibility will let you capture window creation events from other processes without DLL injection. You can modify the example to accommodate for the browsing window specifically. Here's an example I made previously to test that is based on the one from the article. Modify it however you wish:

#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);
    }
}

Upvotes: 3

Related Questions