Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    [c] rintracciare ID processo

    ciao...

    Qualcuno mi sa indicare una funzione del c che dato il nome del processo mi renda l'Id?

    Oppure che funzioni devo usare per fare uno scanner dei processi in esecuzione???

  2. #2

  3. #3
    Qualcuno mi sa indicare una funzione del c che dato il nome del processo mi renda l'Id?
    In un altro forum ti hanno detto che NON ESISTE una funzione del C che faccia quanto chiedi. L'unico modo è appoggiarsi alle funzioni del sistema operativo:

    1) Enumera i processi con EnumProcesses o con un metodo analogo

    2) Apri l'i-mo processo con OpenProcess

    3) Se il nome del processo ricavato con GetModuleBaseName corrisponde a quello cercato restituisci l'ID

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    E su MSDN c'è pure un esempio di enumerazione dei processi.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  5. #5
    grazie mille per le risposte!!!

    ora mi do da fare poi se avro problemi mi farò risentire...

    grazie

  6. #6
    ciao raga...

    Seguendo i vostri esempi sono riuscito a scrivere il mio programma e ad ottenere quello che mi serviva.

    Invece in questo programmino mi da un errore durante l'esecuzione e si chiude...
    non capisco il perchè?? l'errore credo che sia nel confronto dei nomi...

    codice:
    
    
    #include <stdlib.h>
    #include <stdio.h>
    #include <windows.h>
    #include <psapi.h>
    #include <string.h>
    
    
    #define MAX_LISTA 1024
    
     
    char * Nome_process(DWORD ID);
    DWORD rintracciare_id ( char * nome_cercato); 
    
    
    int main()
    {
    
    DWORD ID_process;
    int i; 
    char nome[100];
    
    
        printf("\n\t\t\t   %s\n\n", "CHIUDERE PROCESSI");
        
        printf("Inserisci nome processo :\n $ "); 
        scanf("%s", nome); 
        
        
       ID_process = rintracciare_id( nome); 
       
       if ( ID_process)
       printf("Id del processo : %ld\n", ID_process); 
       else 
       printf("Nome non trovato: %ld\n", ID_process); 
    
        system("PAUSE");	
        return 0;
    }
    
    
    
    DWORD rintracciare_id ( char * nome_cercato) {
    
    DWORD list_Id[MAX_LISTA], byte_resi, N_proc; 
    
    char *nome_id;
    int i; 
    
        if (!EnumProcesses(list_Id, sizeof(list_Id), &byte_resi))
            printf("ERRORE enumProcess\n"); 
    
            N_proc = byte_resi/sizeof(DWORD); 
            
            printf("%s\n", nome_cercato);
        
        for ( i=0; i<N_proc; i++) {
            
            if ( list_Id[i] != 0){
                    
                   nome_id = Nome_process(list_Id[i]); 
                   printf("%s", nome_id);
                   
                   printf("\t\t%s\n", nome_cercato);
                               if (!strcmp(nome_cercato, nome_id))
                   
                                          return list_Id[i];
    
                                    }
              }
    
          return 0;
    
    
    
    
    
    }
    
    
    
    
    
    char * Nome_process ( DWORD ID){
    
    HANDLE processo; 
    HMODULE Hmod; 
    DWORD Byte_Necc;
    
    char buff[100], *p; 
    
        processo = OpenProcess(PROCESS_QUERY_INFORMATION |
                                       PROCESS_VM_READ, FALSE, ID); 
    
        if ( processo != NULL) {
        
           if (EnumProcessModules( processo, &Hmod, sizeof(Hmod), &Byte_Necc))
        
                        GetModuleBaseName(processo, Hmod, buff, sizeof(buff)) ;
                        
           else return "<null>"; 
      
          } else return 0; 
        
        
        p = buff;
    
    
    return p;
    
    }

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Originariamente inviato da PeppePes88
    Seguendo i vostri esempi sono riuscito a scrivere il mio programma e ad ottenere quello che mi serviva.

    Invece in questo programmino mi da un errore durante l'esecuzione e si chiude...
    non capisco il perchè?? l'errore credo che sia nel confronto dei nomi...
    L'errore più grossolano che si nota (non ho controllato tutto tutto) è il modo concettualmente sbagliato di ritornare una stringa dalla funzione Nome_process.
    Sostanzialmente ritorni l'indirizzo di una variabile locale, che sparisce appena la funzione termina.
    Rivedi il tutto meglio.

    Il return "<null>" è molto LOL.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  8. #8
    quindi con una variabile globale risolvo tutto???

    no ho provato e mi da lo stesso erore mi scrive un paio di processi e poi si blocca..

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.