Prosessilistaus Windowsille

Chrysalid 18.04.06 18:38

Esimerkki CreateToolhelp32SnapShot - funktion käytöstä prosessien ja niiden ID-tunnuksien listaamiseen

 Tekstiversio  Arvo: 1 (3 ääntä)  Äänestä: +  -
/*

  jpid.c 
 
  (C) Jaakko Hartikainen a.k.a Chrysalid (jaakko@ritke.fi), koodia saa käyttää vapaasti.
 
  Ohjelma demonstroi ToolHelp Snapshotin käyttöä Windowsissa (Win95:stä
  ylöspäin) Ilman argumentteja listataan kaikki prosessit pid eli Process ID
  - numeroineen. Jos ohjelma  käynnistetään kill - parametrilla, ohjelma yrittää
  tappaa kyseisen prosessin.
               
  jpid kill <pid>
 
  Lisätietoja:
  http://msdn.microsoft.com/library/en-us/perfmon/base/snapshots_of_the_system.asp
 

*/


#include<windows.h>
#include<Tlhelp32.h>

void ListProcs()
{
     BOOL ret = TRUE;
     PROCESSENTRY32 pentry;
     HANDLE snap;
     
     snap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
     
     if (snap == INVALID_HANDLE_VALUE)
     {
       printf("Error in CreateToolhelp32Snapshot\n");
       exit(1);
     }
     
     pentry.dwSize = sizeof(PROCESSENTRY32);
     Process32First(snap,&pentry);
     printf("%s\t\t%d\n",pentry.szExeFile,pentry.th32ProcessID);
     
     while (ret == TRUE)
     {
       pentry.dwSize = sizeof(PROCESSENTRY32);
       ret = Process32Next(snap,&pentry);
       printf("%s\t\t%d\n",pentry.szExeFile,pentry.th32ProcessID);
     }
}

int main(int argc, char **argv)
{
    if (argc < 2)
    {
      printf("jpid: No arguments given, displaying all processes with their process ID's.\n\n");
      printf("PROCESS NAME\t\tPID\n");
      ListProcs();
    }
      else
    {
      if (strcmp("kill",argv[1]) == 0)
      {
         HANDLE h;
         int pid = atoi(argv[2]);
               
         printf("jpid: attempting to kill pid %d...",pid);
               
         h = OpenProcess(PROCESS_TERMINATE,0,(DWORD)pid);
         if (h != NULL){
            TerminateProcess(h,0);
            printf(" success.");
            }
         }
    }
   
    return 0;
}
 

editoitu: 21:43 18.4.06
Torak 21:42 18.4.06 
Tuli 02 tehtyä tämmöinen vastaanvanlainen http://mureakuha.com/koodikirjasto/89
Chrysalid 22:07 18.4.06 
Äh, perhana. No kuitenkin. Tuossa sinun toteutuksessasi olet lähtenyt hakemaan sitä tiedoston nimeä aika monimutkaisesti, kun se kuitenkin on PROCESSENTRY32 structin jäsen ( szExeFile ). Harmi, ei tullut vilkaistua koodipätkiä tarpeeksi tarkasti. Toivottavasti kuitenkin kelpaa.
Torak 00:23 24.4.06 
Joo, tossa meikäläisen esimerkissä on ideana että haetaan koko tiedoston polku. Niin ei tarvitse ihmetellä missä hakemistossa mikäkin on.