Prüfen ob Programm noch aktiv ist



  • Hallo

    Wie kann ich mit einen Programm prüfen ob ein anderes Programm noch im Taskmanager aktiv ist. Danke im vorraus Praetorianer.



  • Hallo

    wenn du den Namen (oder einen Teil des Namens) der Anwendung kennst, kannst du die Prozeßliste durchgehen. Dazu brauchts du die WinAPI-Funktion EnumWindows.
    Dafpr habe ich mir folgendes zusammengebaut :

    // Hilfsdaten für die Suche nach einem Prozeß
    struct TProcessHandle
    {
      HANDLE ProcessHandle;
      AnsiString TitlePart;
      };
    
    // Callback-Funktion zum Überprüfen eines Prozeßes
    BOOL CALLBACK FindWinword(HWND hwnd, LPARAM lParam)
    {
      char title[110]; // Titel des Prozeßes
      AnsiString Buffer; // Zwischenspeicher
      struct TProcessHandle *ProcessHandle = (TProcessHandle *) lParam; // lParam als Hilfsstrucktur
      void *hg; // Globaler Zeiger
      unsigned long *ProcessID; // Die PID des Prozeßes
    
      GetWindowText(hwnd,title,110); // Titel des Fensters bestimmen
      Buffer = title; // Titel in AnsiString konvertieren
    
      // Wenn gesuchter Teil in aktuellen Titel vorhanden, Suche erfolgreich
      if (Buffer.AnsiPos(ProcessHandle->TitlePart) > 0)
      {
        hg = GlobalAlloc(GMEM_SHARE,sizeof(unsigned long)); // Zeiger erschaffen
        ProcessID = (unsigned long *)GlobalLock(hg); // Speicher für ProzeßID zuweisen
        GetWindowThreadProcessId(hwnd, ProcessID); // ProzeßID ermitteln
        ProcessHandle->ProcessHandle = OpenProcess(PROCESS_ALL_ACCESS, true, *ProcessID); // Prozeßhandle für ProzeßID zurückgeben
        GlobalUnlock(hg); // Speicher freigeben
        GlobalFree(hg); // Speicher freigeben
        return(false); // Suche nicht fortsetzen
        }
    
      return(true); // Suche fortsetzen
      }
    

    Wenn du das in dein projekt einbaust, kannst du dann mit diesem Aufruf ein Prozeß finden :

    TProcessHandle ProcessHandle; // Hilfsstruktur
    ProcessHandle.TitlePart = <Teil des gesuchten Prozeß-Titels>; // Suchkriterium
    
    // Suche ausführen und auswerten
    if (EnumWindows((WNDENUMPROC)FindWinword, (LPARAM) &ProcessHandle) == false)
    {
      // etwas tun, wenn Prozeß gefunden wurde
       }
    else
    {
      // etwas zun, wenn Prozeß nicht gefunden wurde
      }
    

    bis bald
    akari



  • Danke akari für die schnelle Antwort


Anmelden zum Antworten