Nachrichten von anderen Fenstern abfangen
-
Hallo Leute!
Ich habe da ein kleineres (größeres) Problem:
Mein Programm soll die Nachricht WM_PAINT, die von der Applikation CamAlert (Überwachungsprogramm für Webcams) gesendet wird, abfangen (jede zehntel Sekunde wird das geprüft). Nähere Infos werdet Ihr sicher aus dem Quellcode herauslesen können:void CWinHideDlg::OnTimer(UINT nIDEvent) { // Nachricht killn lpMsg.message = NULL; // Suche CamAlert-Hauptfenster if((hWnd = ::FindWindow("ThunderRT6FormDC", 0)) != NULL) { // Suche CamAlert PopUp-Fenster if((hChield = FindWindowEx(hWnd, 0, "ClsCapWin", "WebCam (driver)")) != NULL) { // Lese Nachricht von PopUp-Fenster if(::PeekMessage(&lpMsg, hChield, 0, 0, PM_NOREMOVE)) { // Übersetze Nachricht ::TranslateMessage(&lpMsg); // Werte Nachricht aus if(lpMsg.message == WM_PAINT) { // Suche VLC Fenster if((hWnd = ::FindWindow("wxWindowClassNR", "VLC media player")) != NULL) { // Blende VLC Fenster aus ::ShowWindow(hWnd, FALSE ? SW_SHOW : SW_HIDE); ::UpdateWindow(hWnd); } } // Nachricht einstampfen ::DispatchMessage(&lpMsg); } } } // Handles zurücksetzen hWnd = NULL; hChield = NULL; CDialog::OnTimer(nIDEvent); }Nun zum Problem: Bei if(::PeekMessage... wirfts mich raus und ich habe keine Ahnung, warum. Eigentlich will ich nur prüfen, ob das Fenster "WebCam (driver)" gerade geöffnet ist. Mit nur FindWindow geht das nicht, weil die Fensterklasse ja so lang existiert, bis CamAlert geschlossen und neu gestartet wird. Das ist aber zu Umständlich.
Lange Rede, kurzer Sinn: Ich will einfach nur feststellen lassen, ob das entsprechende CamAlert-Fenster gerade offen ist, oder nicht.
Wer ne Lösung zum PeekMessage-Problem hat, BITTE posten. Wer ne andere Lösung hat als meine, BITTE auch posten (bin am Ende
)Please Help!

-
Imho solltest du nicht in fremden Message-Queues rumpfuschen - die Nachrichten dort gehören dem anderen Programm (und sind möglicherweise wichtig). Da ist es doch einfacher, die andere Anwendung nach ihrem Status zu fragen (GetWindowPlacement()).
-
Danke für den Tip

Aber leider hat auch mit dieser Funktion keiner meiner Versuche erfolg
Ich weis leider nicht, wie dieses blöde CamAlert das Fenster ein u. ausblendet. Habe es deshalb zuerst mit den messages versucht, weil WM_PAINT nur beim eingeblendetem Fenster gesendet wird (habs mit Spy++ geloggt). Aber vielleicht mach ich auch was falsch:::GetWindowPlacement(hChield, &WndPlacement); if(WndPlacement.showCmd == SW_SHOWNORMAL) { // gleicher Code zum Ausblenden von VLC ... }Vielleicht kann mir da noch jemand nen heißen Tip geben

Währe sehr dankbar...