Überprüfen ob Programm / Prozess läuft



  • #include <windows.h>
    #include <tlhelp32.h>
    #include <iostream>
    
    using namespace std;
    
       typedef BOOL (WINAPI *TH32_PROCESS)
                    (HANDLE hSnapShot, LPPROCESSENTRY32 lppe);
    
    static TH32_PROCESS pProcess32First = NULL;
    static TH32_PROCESS pProcess32Next = NULL;
    
    bool isProcessAlive(char* process_name)
    {
    
       PROCESSENTRY32 pe32 = { 0 };
       HANDLE hSnapshot    = NULL;
    
       HINSTANCE hDll = LoadLibrary("kernel32.dll");
    
       pProcess32First=(TH32_PROCESS)GetProcAddress(hDll,"Process32First");
       pProcess32Next=(TH32_PROCESS)GetProcAddress(hDll,"Process32Next");
    
       bool process_state = FALSE;
    
       hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
       if (hSnapshot != (HANDLE) -1)
       {
             pe32.dwSize = sizeof (PROCESSENTRY32);
             if (pProcess32First (hSnapshot, &pe32))
             {
                 do
                 {
                     if(strcmpi(pe32.szExeFile, process_name) == 0)
                     {
                             process_state = TRUE;
                     }
                 }
                 while(pProcess32Next (hSnapshot, &pe32));
             }
             CloseHandle (hSnapshot);
       }
    return process_state;
    }
    
    char* echo(char* in)
    {
    	cout << in;
    }
    
    int main()
    {	
    	system("CLS");
    	if(isProcessAlive("Deinprogramm.exe")
    	{
    		echo("Dein Prog läuft");
    	} else {
    		echo("Dein Prog läuft nicht");
    	}
    
    	return 0;
    }
    

    hoffe das hilft dir :p



  • Tjo. stimmt HumeSikkins. Ist eigentlich das gleiche... 🙄



  • /\
    ||
    ||
    ||
    ||
    ||
    / Da oben steht was...



  • Ja habs gerade gesehen. Vielen Danke, klappt prima 😃



  • na dann iss jah gud o 👍



  • hallo,

    ich nutze diesen snippet auch um herauszufinden ob ein bestimmtes programm läuft. funzt prima! danke schonmal dafür 🙂

    aber auf einige sachen kann ich mir keinen reim machen. evtl. könnte das mal jemand für mich entschlüsseln 😉

    wozu dient die typedef hier genau? das kapier ich überhaupt nicht 😞

    typedef BOOL (WINAPI *TH32_PROCESS) (HANDLE hSnapShot, LPPROCESSENTRY32 lppe);
    

    was genau wird hier deklariert, initialisiert und zugewiesen?

    PROCESSENTRY32 pe32 = { 0 }; 
    HANDLE hSnapshot    = NULL; 
    
    HINSTANCE hDll = LoadLibrary("kernel32.dll"); 
    
    pProcess32First=(TH32_PROCESS)GetProcAddress(hDll,"Process32First"); 
    pProcess32Next=(TH32_PROCESS)GetProcAddress(hDll,"Process32Next"); 
    
    bool process_state = FALSE;
    

    für sonstige erklärung wär ich echt dankbar.

    könnte ich auch etwas vom code abändern oder weglassen?? nutze kein c++ in dem programm sondern nur c und die winapi.



  • K 141 schrieb:

    nutze kein c++ in dem programm sondern nur c und die winapi.

    Das ist reines C...

    K 141 schrieb:

    was genau wird hier deklariert, initialisiert und zugewiesen?

    PROCESSENTRY32 pe32 = { 0 }; 
    HANDLE hSnapshot    = NULL;
    

    Sowohl pe32 als auch hSnapshot werden mit 0 initialisiert.

    HINSTANCE hDll = LoadLibrary("kernel32.dll"); 
    pProcess32First=(TH32_PROCESS)GetProcAddress(hDll,"Process32First"); 
    pProcess32Next=(TH32_PROCESS)GetProcAddress(hDll,"Process32Next"); 
    bool process_state = FALSE;
    

    ...dann wird die kernel32.dll geladen und die beiden benötigten Funktionen importiert...



  • Öhm, Kernel32.dll laden? Ich glaube, wenn du das nötig hast, dann dürfte dein Programm gar nicht erst starten.



  • Ich find's auch irgendwie unsinnig und würde die kernel32.lib direkt verlinken...



  • Vor allem er läd sie und prüft dann nicht, ob sie auch geladen wurde. Wenn schon dann bitte richtig überflüssig. 😃

    Der Cast:

    if (hSnapshot != (HANDLE) -1)
    

    ist auch so eine Stilblüte. 🙄 Warum nicht die Konstante INVALID_HANDLE_VALUE nehmen?



  • Hepi schrieb:

    Ich find's auch irgendwie unsinnig und würde die kernel32.lib direkt verlinken...

    Das macht er doch auch. Schau mal zwei Zeilen weiter:

    hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
    

    Damit ist dann nicht nur das Laden überflüssig, sondern auch die GetProcAddress-Aufrufe. Außerdem fehlt der Aufruf von FreeLibrary. 🤡



  • öhm

    using namespace std;
    

    ist reines C ja? :p kenn das nur aus C++



  • LOL. Immer wieder lustig.



  • if(fopen("test.exe","a")==NULL)
    {
    //Programm ist gestartet
    }

    Ist doch einfacher, oder?
    Weil, wenn die Datei gestartet ist, kann man nichts an sie anhängen. Deshalb funktioniert das auch.
    *gg*

    mfG ©h


Anmelden zum Antworten