Überprüfen ob ein Prozess läuft



  • Hallo Community,
    wie kann ich überprüfen ob ein Prozess bsp. "firefox.exe" läuft?



  • Ok hat sich bereits schon erledigt.



  • Lässt du auch den Rest der Welt an deiner Lösung teilhaben, wenn du schon hier im Forum postest?



  • Hi,
    nein ich bin Egoist.



  • //*****************************************************************************
    //*
    //*     ProcessRunningOwn
    //*
    //*****************************************************************************
    //  Retuns 1 if a other instance of the currend process is running
    int ProcessRunningOwn()
    {
    DWORD           dwId;
    HANDLE          hSnapshot;
    HANDLE          hModules;
    PROCESSENTRY32  sProcess;
    MODULEENTRY32   sModule;
    char            cBuffer[MAX_PATH];
    char           *pName;
    int             iLen,iRet=0;
    
        iLen = GetModuleFileName(NULL,cBuffer,sizeof(cBuffer));
        // Hier könnte man auch einen andern Pfad benutzen
        dwId = GetCurrentProcessId();
    
        for(;iLen>0;iLen--)
            {
            if(cBuffer[iLen-1]=='\\')break;
            if(cBuffer[iLen-1]=='/' )break;
            }
    
        pName           = cBuffer+iLen;
        hSnapshot       = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
        sProcess.dwSize = sizeof(sProcess);
    
        if(!hSnapshot)
            {
            return 0;
            }
    
        if(!Process32First(hSnapshot,&sProcess))
            {
            CloseHandle(hSnapshot);
            return 0;
            }
    
        do  {
            if(sProcess.th32ProcessID==dwId)continue;   // ignore the own process
    
            if(strnicmp(pName,sProcess.szExeFile,15))   // compare process name
                {
                continue;
                }
    
            hModules       = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,sProcess.th32ProcessID);
            sModule.dwSize = sizeof(sModule);
    
            if(!Module32First(hModules,&sModule))
                {
                CloseHandle(hModules);
                continue;
                }
    
            do  {
                if(stricmp(cBuffer,sModule.szExePath))  // compare full name
                    {
                    continue;
                    }
    
                iRet=1;
                break;
                }while(Module32Next(hModules,&sModule));
    
            CloseHandle(hModules);
            if(iRet)break;
    
            }while(Process32Next(hSnapshot,&sProcess));
    
        CloseHandle(hSnapshot);
    
    return iRet;
    }
    


  • Hi

    übliche vorgehensweise... 😉

    dau



  • Geht auch etwas kürzer:

    {
     HANDLE snapshot;
     PROCESSENTRY32 proc;
     proc.dwSize = sizeof(PROCESSENTRY32);
     int Anzahl_Prozesse=0;
    
     String strProcess = prozessname;  //z.B. "Notepad.exe"
     snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); //Momentaufnahme von
     Process32First(snapshot, &proc);                //den laufenden Prozessen machen
    
     do   //alle laufenden Prozesse auf ihren Namen hin mit "prozessname" vergleichen:
     {
     if (strProcess == proc.szExeFile)
        Anzahl_Prozesse=Anzahl_Prozesse+1;  //Prozesszähler erhöhen,
     }                                      //wenn Prozess mit dem Namen gefunden wurde
     while (TRUE == Process32Next(snapshot, &proc));  
    
     return(Anzahl_Prozesse);
    }
    

    Allerdings:
    Kann es sein, dass dies NICHT bei Windows7-64bit funktioniert?
    Mit meiner 32-Bit-Anwendung findet er auf diese Weise leider nicht einen gesuchten 64-Bit-Prozess.????

    Hat jemand eine Lösung?



  • Die Lösung ist WMI mit Win32_Process



  • hat jemand für Win32_Process einmal einen Beispielcode, Danke!



  • hierfür muss aber der wmi-Dienst gestartet sein. Wenn nicht, funktioniert diese Sache auch nicht. Ich möchte aber meine C++-Anwendung unabhängig von anderen Diensten machen.
    Welche Alternative gibt es also noch?


  • Mod

    z.B. kontrollieren ob der Firefox ein Objekt in der IRot veröffentlicht und dieses abfragen.


Anmelden zum Antworten