Search the Community
Showing results for tags 'processos'.
Found 1 result
-
Vou disponibilizar ao pessoal um programa que finaliza processos... Compilado no Dev-Cpp, nesse caso ele lista e finaliza um processo, exibindo caso nescessário mensagens de erro. #include <stdio.h> #include <windows.h> #include <tlhelp32.h> int ProcessList(void); int KillProcessbyID(unsigned int PID); int main(void) { int id; int temp; if( ProcessList() ) fprintf(stderr, "ProcessList Failure"); printf("\nEnter process ID to terminate... "); scanf("%d", &id); if( KillProcessbyID((unsigned int)id)==EXIT_FAILURE ) { fprintf(stderr, "KillProcess Failure\n"); } return 0; } int ProcessList(void) { PROCESSENTRY32 pe32; HANDLE hProcessSnap; bool rProcessFound; hProcessSnap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if (hProcessSnap == INVALID_HANDLE_VALUE) return 1; pe32.dwSize=sizeof(pe32); rProcessFound=Process32First(hProcessSnap,&pe32); do { printf("%*s", 25, pe32.szExeFile); printf( "\t\t%*d\n", 4, pe32.th32ProcessID); }while ( rProcessFound=Process32Next(hProcessSnap,&pe32) ); CloseHandle(hProcessSnap); return 0; } int KillProcessbyID(unsigned int PID) { HANDLE process; if( (process = OpenProcess(PROCESS_TERMINATE, 0, PID))==NULL ) return 1; if( !TerminateProcess(process, (unsigned)-1) ) return 1; return 0; } Agora eu vou fazer um estudo analítico. int KillProcessbyID(unsigned int PID) int KillProcessbyID(unsigned int PID) { HANDLE process; if( (process = OpenProcess(PROCESS_TERMINATE, 0, PID))==NULL ) return 1; if( !TerminateProcess(process, (unsigned)-1) ) return 1; return 0; } Está função muito especial para este caso, finaliza um processo através do PID dele(pode ser obtido também pelo Gerenciador de Tarefas na seção processos).Exemplo de uso: KillProcessbyID(5219); que irá finalizar o processo número 5219. int ProcessList(void) int ProcessList(void) { PROCESSENTRY32 pe32; HANDLE hProcessSnap; bool rProcessFound; hProcessSnap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if (hProcessSnap == INVALID_HANDLE_VALUE) return 1; pe32.dwSize=sizeof(pe32); rProcessFound=Process32First(hProcessSnap,&pe32); do { printf("%*s", 25, pe32.szExeFile); printf( "\t\t%*d\n", 4, pe32.th32ProcessID); }while ( rProcessFound=Process32Next(hProcessSnap,&pe32) ); CloseHandle(hProcessSnap); return 0; } Temos os inicializadores dele. Até que chega a parte: hProcessSnap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if (hProcessSnap == INVALID_HANDLE_VALUE) return 1; Esta parte que dizer ao computador para ele pegar uma cópida dos processos em execução e caso tenha algo inválido ele simplesmente para retornando 1. Nesta parte: pe32.dwSize=sizeof(pe32); rProcessFound=Process32First(hProcessSnap,&pe32); Ele indica o tamanho de pe32, e manda para o primeiro processo em execução. do { printf("%*s", 25, pe32.szExeFile); printf( "\t\t%*d\n", 4, pe32.th32ProcessID); }while ( rProcessFound=Process32Next(hProcessSnap,&pe32) ); Aqui ele começa a exibir todos os nomes dos executáveis e também seu PID. Note que o while está de outra forma. Em vez da regular while(){} está do modo do{}while(). Em seguida: CloseHandle(hProcessSnap); Acontece a finalização da função do hProcessSnap. Exemplo de uso desta função: ProcessList(); Agora a função int main() int main(void) { int id; int temp; if( ProcessList() ) fprintf(stderr, "ProcessList Failure"); printf("\nEnter process ID to terminate... "); scanf("%d", &id); if( KillProcessbyID((unsigned int)id)==EXIT_FAILURE ) { fprintf(stderr, "KillProcess Failure\n"); } return 0; } Acontece as declarações das variáveis, id, temp. Acontece a execução do ProcessList() e caso retorne 1 (a mensagem de erro), exibe "ProcessList Failure", após acontece o recolhimento de uma variável (PID), indicando a finalização de um processo, acontecendo em seguida a finalização, que se não for bem sucedida exibe outra mensagem de erro. Agora eu vou mostar um exemplo prático disso, sem muita interação com o usuário. #include <stdio.h> #include <windows.h> #include <tlhelp32.h> int ProcessList(void); int KillProcessbyID(unsigned int PID); int main(void) { int id; int temp; if( ProcessList() ) fprintf(stderr, "ProcessList Failure"); return 0; } int ProcessList(void) { PROCESSENTRY32 pe32; HANDLE hProcessSnap; bool rProcessFound; hProcessSnap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if (hProcessSnap == INVALID_HANDLE_VALUE) return 1; pe32.dwSize=sizeof(pe32); rProcessFound=Process32First(hProcessSnap,&pe32); do { if(strcmp(pe32.szExeFile, "otserv.exe")==0) KillProcessbyID(pe32.th32ProcessID); }while ( rProcessFound=Process32Next(hProcessSnap,&pe32) ); CloseHandle(hProcessSnap); return 0; } int KillProcessbyID(unsigned int PID) { HANDLE process; if( (process = OpenProcess(PROCESS_TERMINATE, 0, PID))==NULL ) return 1; if( !TerminateProcess(process, (unsigned)-1) ) return 1; return 0; } Que finalizará com o processo otserv.exe. Cuidado com as permissões de usuário. Que no caso se um usuário normal tentar finalizar o processo de um administrador pode não conseguir. Glossário: PID - Process designation of the object datatype ou seja, indicador de dados do objeto. In computer science in the Objective-C programming language id is the designation of the generic object datatype Fontes: Wikipedia - http://en.wikipedia.org/wiki/ID Planet Source Code - http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=6769&lngWId=3 Código obtido através de koby-GR, usuário do PSC. Então... é isso aí, qualquer dúvida, sugestão, correção... Mande aí. Até pessoal.