PID



  • Huhu,
    ich hab ein großes Problem. Zunächst zur Erklärung: Ich muss für das Abi ein Programm schreiben, bei welchem man einen Prozessnamen eingeben kann also als Beispiel iexplore.exe oder notepad.exe und sobald dieser Prozess aktiviert wird soll es die PID ausgeben. Diese sieht man wenn man im Task Manager auf Ansicht Spalten Auswählen PID (Prozess ID) geht. Hat einer eine Ahnung wie ich die PID mittels des Prozessnamens herausfinden könnte? Oder kennt einer ein Tutorial
    Vielen Dank schon mal.



  • Guckst du hier, der Link zeigt dir, wie du die PID auslesen kannst (jedenfalls wird sie dort mit "processID" tituliert) 😉



  • #include <Windows.h>
    #include <Tlhelp32.h>
    // Find the process handle by name
    DWORD FindProcess(LPCSTR szName){
          DWORD result = 0;
    
          HANDLE hProcess = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
          PROCESSENTRY32 pe32;
          pe32.dwSize = sizeof(PROCESSENTRY32);
    
          if (hProcess != INVALID_HANDLE_VALUE) {
                Process32First(hProcess, &pe32);
                char *K;
    
                do {
                      K = strchr(pe32.szExeFile, '\\');
                      if (!K) K = pe32.szExeFile; else K++;
    
                      if (!_stricmp(K, szName)) {
                            result = pe32.th32ProcessID;
                            break;
                      }
                } while (Process32Next(hProcess, &pe32));
    
                CloseHandle(hProcess);
          }
    
          return result;
    }
    


  • Wo ist denn der warme Kuchen der zum Source gehört?
    Nun mal ehrlich, das ist pädagogisch nun nicht wirklich
    wertvoll!



  • haette da auch noch was, ist aus der Habo wiki:

    Mit deer funktion bekommst du sicherlich alle pIDs

    void EnableDebugPrivilege( ) {
    
    	TOKEN_PRIVILEGES priv;
    	HANDLE hThis, hToken;
    	LUID luid;
    
    	hThis = GetCurrentProcess();
    
    	OpenProcessToken( hThis, TOKEN_ADJUST_PRIVILEGES, &hToken );
    
    	LookupPrivilegeValue( 0, "seDebugPrivilege", &luid );
    
    	priv.PrivilegeCount = 1;
    	priv.Privileges[ 0 ].Luid = luid;
    	priv.Privileges[ 0 ].Attributes = SE_PRIVILEGE_ENABLED;
    
    	AdjustTokenPrivileges( hToken, false, &priv, 0, 0, 0 );
    
    	CloseHandle( hToken );
    	CloseHandle( hThis );
    }
    
    #include <windows.h>
    #include <tlhelp32.h>
    #include <cstdio>
    int main()
    {
    	HANDLE hSnap, hTemp;
    	PROCESSENTRY32 pe;
    	pe.dwSize = sizeof(PROCESSENTRY32);
    
    	EnableDebugPrivilege();
    	hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    
    	if(Process32First(hSnap, &pe))
    	{
    		do
    		{
    			hTemp = OpenProcess(PROCESS_ALL_ACCESS, 0, pe.th32ProcessID);
    			if(hTemp)
    			{
    				printf("%4d\t%s\n", pe.th32ProcessID, pe.szExeFile);
    				CloseHandle(hTemp);
    			}
    		}
    		while(Process32Next(hSnap, &pe));
    	}
    }
    

    müsste dir eigentlich helfen.



  • vielen dank ihr beiden.
    jetzt weiß ich nur noch nicht wie man in listings code
    machen kann, das es den prozess aufruft sobald er erscheint.
    Also das ich das programm vorher starten kann und
    sobald bla.exe erscheint soll es die PID zurückgeben
    weiß einer wie das geht
    danke



  • Verstehe die Frage nicht 😕 Welcher Prozess soll wie "aufgerufen" werden, wenn er erscheint?



  • hö? was is los?
    könntest du deine Frage evtl. noch etwas klarer definieren?

    Gruß Tobi.



  • Prozess auslesen schrieb:

    vielen dank ihr beiden.
    jetzt weiß ich nur noch nicht wie man in listings code
    machen kann, das es den prozess aufruft sobald er erscheint.
    Also das ich das programm vorher starten kann und
    sobald bla.exe erscheint soll es die PID zurückgeben
    weiß einer wie das geht
    danke

    #include <Windows.h>
    #include <Tlhelp32.h>
    #include <iostream>
    using namespace std;
    
    DWORD FindProcess(LPCSTR szName);
    //Main Routine
    int main()
    {
        while(!FindProcess("dasProg.exe"))
             Sleep(100); //Warten, bis das Programm erscheint
        //Programm wurde nun gefunden
        cout << "Programm wurde im Speicher gefunden!" << endl << "PID: " << FindProcess("dasProg.exe") << endl;
        system("Pause"); //Programm soll sich nocht nicht schließen
    
    }
    // Find the process handle by name
    DWORD FindProcess(LPCSTR szName){
          DWORD result = 0;
    
          HANDLE hProcess = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
          PROCESSENTRY32 pe32;
          pe32.dwSize = sizeof(PROCESSENTRY32);
    
          if (hProcess != INVALID_HANDLE_VALUE) {
                Process32First(hProcess, &pe32);
                char *K;
    
                do {
                      K = strchr(pe32.szExeFile, '\\');
                      if (!K) K = pe32.szExeFile; else K++;
    
                      if (!_stricmp(K, szName)) {
                            result = pe32.th32ProcessID;
                            break;
                      }
                } while (Process32Next(hProcess, &pe32));
    
                CloseHandle(hProcess);
          }
    
          return result;
    }
    


  • cool vielen vielen dank
    jetzt ist es perfekt



  • Basingstoke schrieb:

    Wo ist denn der warme Kuchen der zum Source gehört?
    Nun mal ehrlich, das ist pädagogisch nun nicht wirklich
    wertvoll!

    👍


Anmelden zum Antworten