FindWindow windows 98
-
Hi, ich muss mit meinem Programm feststellen ob eine andere Anwendung läuft, das klappt auch wunderbar (bei mir: windows xp )
unter windows 98 funktioniert das angeblich nicht, hat mir jedenfalls mein "Tester" gesagt
.
Gibts eine Möglichkeite (andere Funktion?) die auf allen OS läuft?
(also sagen wir mal mind. auf 98,me,2000,xp.)//beispiel code:
#include <windows.h> #include <iostream> using namespace std; int main() { HWND test; test = FindWindow(NULL, "Programm"); if (test != 0) { cout << "läuft...." << endl; } if (test == 0) { cout << "läuft nicht...." << endl; } return 0; }
-
Normalerweise sollte diese Funktion ab W95,NT 3.51 funktionieren. Was liefert denn GetLastError() im Fehlerfall?
-
also mein "Tester" sagt er bekommt immer ein Handle zurück, egal ob das "Progamm" läuft oder nicht.
fehlermeldung etc. gibts nicht - funktioniert nur nicht.
-
Das heißt, dein Programm gibt auch "läuft" aus, wenn das Fenster nicht da ist, also dein Programm nicht läuft!? Nutze am besten mal Spy++ und schaue, welche Fenster im Moment aktiv sind. Dort kannst du dann auch deine HWND wiederfinden, die FindWindow dir geliefert hat.
-
werde ich mal probieren. danke.
-
Ok, problem hat sich gelöst.
"Mein Tester" hatte einen Ordner mit dem gleichen Namen...das wurde dann auch gefunden.ich gebe jetzt einfach noch den lpClassName parameter mit an dann klappt es

-
FindWindow hat eine paar Nachteile:
- der Window Class Name ist bei MFC-Anwendungen oft der gleiche; ebenso für ATL/WTL
- Der Fenstertitel ist nicht sehr stabil (Lokalisierung, Dokumentname, "[*]für modified, ...)
- wenn irgendeine Anwendung hängt, hängt FindWindow auchEine saubere Lösung bekommst du:
- RegisterWindowMessage + EnumWindows + SendMessageTimeout
- eingene WNDCLASS (mit eigenem Namen) + EnumWindows + SendMesageTimeout
- named Mutex ( + eine der obigen wenn du der vorigen Instanz irgendwas übergeben willst)Oder auch:
Clickety
-
danke für den Hinweis. ich werde es mal ausprobieren!