prozesse anhand ihrer "pid" killen... ganze pfade der prozesse anzeigen



  • hallo, ich poste diesen beitrag mal hier da ich
    in der win32-konsole programmiere!

    ich habe diese codes zum anzeigen und "killen" von prozessen
    gefunden:

    anzeigen:

    #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;
    
    int main()
    {
       PROCESSENTRY32 pe32 = { 0 };
       HANDLE hSnapshot    = NULL;
    
       HINSTANCE hDll = LoadLibrary("kernel32.dll");
    
       pProcess32First=(TH32_PROCESS)GetProcAddress(hDll,"Process32First");
       pProcess32Next=(TH32_PROCESS)GetProcAddress(hDll,"Process32Next");
    
       hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);              
       if (hSnapshot != (HANDLE) -1)
       {
    	pe32.dwSize = sizeof (PROCESSENTRY32);
    	int proc_cnt=0,thrd_cnt=0;
    
    	if (pProcess32First (hSnapshot, &pe32))
    	{		
    	    cout<<"Name\t\t\t\tThreads"<<endl<<endl;
    	    do
    	    {					
    	        thrd_cnt+=pe32.cntThreads;
    		proc_cnt++;
    
    		cout<<"  "<<"\t\t\t\t"<<pe32.cntThreads
    		    <<"\r"<<pe32.szExeFile<<endl;	
    
    	    }
    	    while(pProcess32Next (hSnapshot, &pe32));
    
    	}
    
            cout<<endl
    	   <<"Threads:  "<<thrd_cnt<<endl
    	   <<"Prozesse: "<<proc_cnt<<endl;
    
    	CloseHandle (hSnapshot); 
       }	
    
       return 0;
    }
    

    -beenden:

    #include <windows.h> 
    #include <tlhelp32.h> 
    
    void KillProcess(DWORD); 
    
    main() 
    { 
       HANDLE snapshot; 
       PROCESSENTRY32 pe; 
       snapshot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,NULL); 
       pe.dwSize=sizeof(pe); 
    
       if(Process32First(snapshot, &pe)) 
       { 
          do 
          { 
             if(!strcmp(pe.szExeFile, "WORDPAD.EXE")) 
                KillProcess(pe.th32ProcessID); 
          }while(Process32Next(snapshot,&pe)); 
    
    } 
    CloseHandle(snapshot); 
    } 
    void KillProcess(DWORD ProcessID) 
    { 
       HANDLE process; 
    DWORD ExitCode; 
       process=OpenProcess(PROCESS_TERMINATE,FALSE,ProcessID); 
    GetExitCodeProcess(process,&ExitCode); 
       TerminateProcess(process,ExitCode); 
       CloseHandle(process); 
    }
    

    das klappt auch soweit gut, doch es reicht mir nicht aus
    einen prozess anhand seines "namens" zu killen, da dieser ja auch
    öfters vergeben sein kann.

    wie kann ich die "pid" der prozese herrausfinden und sie anhand der
    "pid" killen?

    danke schonmal!

    Babelduo

    p.s: ich kann mich daran erinnern das der code zum anzeigen der prozesse
    unter windows98 die ganzen pfade der prozesse angezeigt hat! wieso ist
    das bei mir unter win2000 nicht so? und wie ist es möglich unter win2k
    die ganzen pfade der prozesse angezeigt zu bekommen?



  • Na einfach schauen ob es der Name ist und dann die PID holen und beenden.

    if (pe32.szExeFile == "Test.exe") 
    			{
    				DWORD nPID = proc.th32ProcessID; //Callback is ne' PID
    				hSnapshot = OpenProcess( PROCESS_TERMINATE, FALSE, nPID ); 
    				TerminateProcess( hSnapshot, 0 ); 
    			}
    

    Gruß
    :: NoName ::



  • :: NoName :: schrieb:

    if (!strcmp(pe32.szExeFile, "Test.exe")) 
    			{
    				DWORD nPID = proc.th32ProcessID; //Callback is ne' PID
    				hSnapshot = OpenProcess( PROCESS_TERMINATE, FALSE, nPID ); 
    				TerminateProcess( hSnapshot, 0 ); 
    			}
    

    Aber mit strcmp



  • yo danke das klappt schon perfekt!

    aber wisst ihr auch wie ich den vollen pfade der prozesse
    angezeigt bekommen kann?

    danke, Babelduo


Anmelden zum Antworten