Ü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?
-
z.B. kontrollieren ob der Firefox ein Objekt in der IRot veröffentlicht und dieses abfragen.