Przejmowanie komunikatów z innych okien

0

Mam uchwyt do innego okna (findwindow), ale nie wiem jak odbierać z niego komunikat

Chodzi mi o to by po kliknięciu na 'X' okno nie zamykało się, tylko minimalizowało.

0

subclassuj WNDPROC tamtego okna, obsluz komunikaty ktore potrzebujesz i podaj dalej do oryginalnej procedury okna.

0

Co podać jako hInstance??

poza tym nie wiadomo jak to powiązać z HWND.

Może ma ktoś kod czegoś takiego??

Albo ktoś podpowie jak przerobić szablon Window Application z Dev-C++ do tego celu.

0

Ale ze niby co powiazac? Masz podmienic procedure tego okna na swoja, do tego masz SetWindowLong lub gotowe makro SubclassWindow.
Po zakonczeniu ustawiasz z powrotem oryginalna procedure okna zeby program mogl prawidlowo dzialac.

Rzecz raczej trywialna - w tym momencie nie powinno byc juz wiecej pytan.

0

HWND h=FindWindow("MozillaUIWindowClass",NULL);
SetWindowLong(h,GWL_WNDPROC,(LONG)WindowProcedure);

Rozumiem, że o to chodzi, ale nadal coś nie działa (działa wszystko oprócz przejmowania komunikatów).

0

No to mysl, nikt za ciebie tego nie zrobi - sprawdz, czy w ogole SetWindowLong sie powiodlo, pokaz swoje WindowProcedure - nie powinna to byc procedura twojego okna tylko zadeklaruj oddzielna.

Poza tym, gdzie zapamietujesz poprzednia procedure okna? W takim wypadku powinienes pobrac stara procedure okna a potem przy wychodzeniu z nowej (default) przywrocic ja z powrotem.

A w ogole jezeli chodzi o subclassing okien obcych aplikacji, to ja bym zrobil hooka, ktory by wykrywal uruchomienie aplikacji i dopiero w funkcji obslugi hooka dal subclassing - oczywiscie hook w oddzielnym dll.

Tak jak ty to chcesz zrobic to mozna sobie subclassowac kontrolki wlasnego okna, czy dla obcej aplikacji to zadziala - nie wiem, raczej watpie (ale mozesz sprawdzic).

0
othello napisał(a)

Tak jak ty to chcesz zrobic to mozna sobie subclassowac kontrolki wlasnego okna, czy dla obcej aplikacji to zadziala - nie wiem, raczej watpie (ale mozesz sprawdzic).
No pewnie, że nie zadziała, to zupełnie inny proces, adres nowej procedury który podajesz przez SetWindowLong jest błędnym wskaźnikiem dla tej aplikacji. Musisz założyć message hook'a.

0

Musisz założyć message hook'a.

To juz chyba lepiej bedzie CBT jak coś.

1 użytkowników online, w tym zalogowanych: 0, gości: 1