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???
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???
Leggi questo thread
http://forum.html.it/forum/showthrea...ight=processid
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:Qualcuno mi sa indicare una funzione del c che dato il nome del processo mi renda l'Id?
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
E su MSDN c'è pure un esempio di enumerazione dei processi.
grazie mille per le risposte!!!
ora mi do da fare poi se avro problemi mi farò risentire...
grazie
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; }
L'errore più grossolano che si nota (non ho controllato tutto tutto) è il modo concettualmente sbagliato di ritornare una stringa dalla funzione Nome_process.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...
Sostanzialmente ritorni l'indirizzo di una variabile locale, che sparisce appena la funzione termina.
Rivedi il tutto meglio.
Il return "<null>" è molto LOL.
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..