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 auch

    Eine 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!


Anmelden zum Antworten