Fremd-Programm überwachen
-
Hi,
ich kenne das Handle eines bestimmten Prozesses auf meinem Rechner. Diesen Prozess (bzw. Programm) überwache ich - sollte jemand versehentlich oder bewusst das Programm stoppen, dann erfährt es mein "Überwachungsprogramm" und startet es erneut. Soweit so gut... - was ich jetzt noch in meinem "Überwachungsprogramm" einbauen möchte ist, dass wenn das zu überwachende Programm minimiert wurde automatisch durch das "Überwachungsprogramm" maximiert werden soll.
Dieses "Überwachungsprogramm" soll später als Dienst im Hintergrund laufen.
-
schau dir mal
::SendMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam)
an
-
Das klappt mit dem Befehl:
.ShowWindow(SW_HIDE);
Turbobrain
-
C-O-M-M-A-N-D-E-R schrieb:
schau dir mal
::SendMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam)
an
Wie lautet denn die Message für maximieren? Aber die eigentliche Frage ist: wie krige ich mit, dass das zu überwachende Programm minimiert worden ist?
-
Hi
Wenn du ein HWND hast, mach folgendes:
HWND Handle; // Dein HWND CWnd *pWnd = CWnd::FromHandle(Handle); if(pWnd->IsIconic()) { // Fenster ist minimiert also maximieren pWnd->ShowWindow(SW_MAXIMIZE); }Grüße Rapha
-
Hi Rapha,
ich kenne nur die Prozess-Id und den HANDLE dieses Prozesses. Diesen HANDLE hole ich mir durch die ID:
DWORD processID; //mein zu überwachender Prozess HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, processID);Weitere Ideen?
-
Jep
Klar ist, dass du ohne das Handle auf das Fenster (das du maximieren willst) nicht weiterkommst.
Also "suche" das HWND über den Fenstertitel und die Fensterklasse mit z.B. FindWindow.
Eine "sicherere" Methode wäre, jedes Fenster im System durchzugehen und die id des dazugehörigen Prozesses (GetWindowThreadProcessId) mit (in deinem Beispiel) processID zu vergleichen.
Wenn die id gleich ist, dann hast du das HWND gefunden (wobei du beachten musst, dass es mehrere Fenster gibt).Grüße Rapha
-
Hallo nochmal,
also ich will ja nicht nerven, aber wie verwendest Du GetWindowThreadProcessId? Woher weiss ich welchen HWND ich übergeben muss um die Prozess-ID zu erhalten?
-
Keine Angst, du nervst nicht

Ich war wohl etwas unpräzise. Mein Vorschlag.
Geh alle Fenster des Systems mit einem CallBack (Stichwort EnumWindows) durch:
Kein kompletter Code, sondern nur der Ansatz:BOOL EnumWindows( WNDENUMPROC lpEnumWindowProc, // pointer to callback function LPARAM lParam // application-defined value ); BOOL CALLBACK EnumWindowsProc( // die Callback Function HWND hwnd, // handle to parent window LPARAM lParam // application-defined value ) { // blablabla //Return Values //To continue enumeration, the callback function must return TRUE; to //stop enumeration, it must return FALSE. }Die CallBack Funktion (hier: EnumWindowsProc) wird für jedes existierende Fenster einmal aufgerufen (wenn du EnumWindows aufrufst). Darin kannst du jetzt die Prozess id für das aktuelle Fenster bekommen (GetWindowThreadProcessId) und dann mit der Prozess id, die du über OpenProcess erhalten hast, vergleichen.
Wenn die ids übereinstimmen, hast du dein HWND gefunden.Wenn dus nicht verstanden hast, frag einfach

Grüße Rapha
-
Hallo Leute,
Hab dazu auch mal ne Frage !! Wenn ich mir mit FindWindow() nun ein HWND von einem Programm hole !! Hab ich dann auch die möglichkeite mit zu bekommen wenn dieses Programm eineMessageBox ausgibt ???? Kann ich diese MessageBox auslesen ?? So das ich den Text der Box in nem CString habe ???
Danke Coolsero