Okno rodzica zawiesza się, gdy okno dziecka zawiesza się, mimo że pochodzi z innego procesu

Zrzeczenie się: Nie znam API Win32, zwłaszcza jak działają okna.

Chciałbym, aby okno niektórych przetwarzało okno potomne innego procesu. Te dwa procesy są także rodzicem i dzieckiem. Ale to nie ma znaczenia. Jak dotąd wszystko działa jak urok - dopóki nie zamrożę głównego wątku okna potomnego.

Wyobraź sobie kontener.exe, który „hostuje” notepad.exe i someApplication.exe

Kiedy zawiesię główny wąteksomeApplication.exe przez kilka sekund jego okno jest zamrożone na ten czas. To jest całkowicie zrozumiałe. Ale oknocontainer.exe będzierównież powiesić na ten sam czas. Okna potomne innych hostowanych procesów (npnotepad.exe) będzie nadal działać dobrze.

UżywamSetParent polecenie, aby zwykłe okno inne niż podrzędne było dzieckiem mojego kontenera.exe:

SetParent(
    childProcess.HWND,
    myOwnHWND
);

Po tym używamsetWindowPos:

SetWindowPos(
    childProcess.HWND,
    HWND_TOP,
    someXPos,
    someYPos,
    0,
    0,
    SWP_FRAMECHANGED or SWP_NOSIZE or SWP_SHOWWINDOW
)

JakoArtykuł MSDN o SetParent sugeruje, ja też usuwamWS_POPUP atrybut stylu i dodajWS_CHILD atrybut. Ponieważ to też nie pomogło, dodałem teżWS_EX_NOACTIVATE rozszerzony atrybut stylu, oba za pomocąSetWindowLongPtr dowództwo. W końcu spróbowałem wysłać oba oknaWM_UPDATEUISTATE a następnie aWM_CHANGEUISTATE wiadomość, ale to też nic nie zmieniło.

To, co mnie myli, to to, że okno procesu nadrzędnego jest nadal rysowane normalnie, dopóki go nie dotknę. Potem zamarza całkowicie, dopóki okno dziecka nie zamarznie. Podejrzewam, że coś nazywa się„kolejka wejściowa”. TheArtykuł MSDN na tematWM_ACTIVATE stan wiadomości:

Wysłane do aktywowanego okna i dezaktywacji okna. Jeśli oknaużyj tej samej kolejki wejściowej, wiadomość zostanie wysłanasynchronicznie, najpierw po dezaktywacji okna okna najwyższego poziomu, a następnie do procedury okna aktywowanego okna najwyższego poziomu. Jeśli okna korzystają z różnych kolejek wejściowych, wiadomość jest wysyłana asynchronicznie, więc okno jest aktywowane natychmiast.

Z tego powodu wiązałem duże nadzieje zWS_EX_NOACTIVATE rozszerzony atrybut stylu.

Podsumowując: Czy jest możliwe hostowanie okna innego procesu i nie zamrażanie własnego okna, gdy okno potomne zawiesza się?

questionAnswers(1)

yourAnswerToTheQuestion