Überpüfen ob Prozess läuft

phi_2k

Erfahrenes Mitglied
Hallo

Ich hab wieder mal eine Frage. Wie ist es möglich zu Überprüfen ob der Prozess Test.exe läuft? :-(
 
Das geht über die Windows-API. Mit EnumProcesses() bekommst du alle Prozesse die momentan Laufen, mit OpenProcess(), kannst du über die ProzessID ein Handle auf einen Prozess bekommen, und somit nähere Informationen holen.
In der MSDN bei Microsoft gibt es ein schönes Beispiel: Enumerating all Processes

Gruß Homer
 
Danke sehr. Mit deinen Informationen hab ich es auch hinbekommen ;) aber ich habe eine einfachere Methode gefunden.

Zum Dank gibts auch den Sourcecode:

PHP:
#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; 
}
 
hi ich hätte noch eine frage zu diesem thema ...hab nähmlich genau das gebraucht:
es sollte doch möglich sein, nachdem ich mit enumprocesses alle prozesse ermittelt habe indem ich den handle des windows ermittle eine wm_quit message zu schicken oder?

Es ist wahrscheinlich nicht aus der Frage klar erkennbar, aber mein problem ist, nachdem ich die PID ermittelt habe wie kann ich damit den HWND des windows ermitteln?
 
Zuletzt bearbeitet:
Kann man - wenn man das HWND hat - dem dann einfach Messages schicken und es so theoretisch fernsteuern?
 
Dürfte gehen eigentlich gehen, auch wenn ich mir nicht 100%ig sicher bin. Ist doch auch das Prinzip von irgendwelchen Brood-Force Hacker Programmen, die einfach einem anderen Programm über Messages die Editfelder füllen und Enter drücken.
 
Und wie soll das gehen? Da ich nicht mit RegisterClass das window registriert hab was ich suche , wie find ich dann den namen für lpszClassName?
 
Parameters

lpClassName
[in] Pointer to a null-terminated string that specifies the class name or a class atom created by a previous call to the RegisterClass or RegisterClassEx function. The atom must be in the low-order word of lpClassName; the high-order word must be zero.
If lpClassName points to a string, it specifies the window class name. The class name can be any name registered with RegisterClass or RegisterClassEx, or any of the predefined control-class names.

If lpClassName is NULL, it finds any window whose title matches the lpWindowName parameter.

lpWindowName
[in] Pointer to a null-terminated string that specifies the window name (the window's title). If this parameter is NULL, all window names match.

du musst den lpWindowName angeben und für lpClassName NULL - siehe auch:

http://msdn.microsoft.com/library/d...indowReference/WindowFunctions/FindWindow.asp
 
Danke. Hab ich auch grad vor 5 Minuten herausgefunden. *lol*
Man muss nur lesen können.:p
Denn handle aufs hWnd dürft er wirklich finden nur leider reagiert das jeweilige fenster nicht auf die WM_QUIT nachricht. Muss ich da noch irgendetwas beachten?
Das schaut so aus:
Code:
hWnd = FindWindow(NULL,"about:blank - Microsoft Internet Explorer");  SendMessage(hWnd,WM_QUIT,1,0);
 
Zurück