#include <windows.h> #include <winbase.h> #include <tlhelp32.h> #include <ctype.h> #include <string.h> //P4|3L0 int matarproceso(const char *szToTerminate) { BOOL endtask = false; BOOL bResult,bResultm; DWORD aiPID[1000],iCb=1000,iNumProc,iV2000=0; DWORD iCbneeded,i; char szName[MAX_PATH],szToTermUpper[MAX_PATH]; HANDLE hProc,hSnapShot,hSnapShotm; HINSTANCE hInstLib; int iLen,iLenP,indx; HMODULE hMod; PROCESSENTRY32 procentry; MODULEENTRY32 modentry; iLenP=strlen(szToTerminate); for(indx=0;indx<iLenP;indx++) szToTermUpper[indx]=toupper(szToTerminate[indx]); szToTermUpper[iLenP]=0; BOOL (WINAPI *lpfEnumProcesses)( DWORD *, DWORD cb, DWORD * ); BOOL (WINAPI *lpfEnumProcessModules)( HANDLE, HMODULE *,DWORD, LPDWORD ); DWORD (WINAPI *lpfGetModuleBaseName)( HANDLE, HMODULE,LPTSTR, DWORD ); HANDLE (WINAPI *lpfCreateToolhelp32Snapshot)(DWORD,DWORD); BOOL (WINAPI *lpfProcess32First)(HANDLE,LPPROCESSENTRY32); BOOL (WINAPI *lpfProcess32Next)(HANDLE,LPPROCESSENTRY32); BOOL (WINAPI *lpfModule32First)(HANDLE,LPMODULEENTRY32); BOOL (WINAPI *lpfModule32Next)(HANDLE,LPMODULEENTRY32); hInstLib = LoadLibraryA("PSAPI.DLL"); lpfEnumProcesses = (BOOL(WINAPI *)(DWORD *,DWORD,DWORD*))GetProcAddress( hInstLib, "EnumProcesses" ); lpfEnumProcessModules = (BOOL(WINAPI *)(HANDLE, HMODULE *,DWORD, LPDWORD)) GetProcAddress( hInstLib,"EnumProcessModules" ); lpfGetModuleBaseName =(DWORD (WINAPI *)(HANDLE, HMODULE, LPTSTR, DWORD )) GetProcAddress( hInstLib,"GetModuleBaseNameA" ); bResult=lpfEnumProcesses(aiPID,iCb,&iCbneeded); iNumProc=iCbneeded/sizeof(DWORD); for(i=0;i<iNumProc;i++){ strcpy(szName,"¿?"); hProc=OpenProcess(PROCESS_QUERY_INFORMATION|PROCESS_VM_READ,FALSE,aiPID[i]); if(hProc){ if(lpfEnumProcessModules(hProc,&hMod,sizeof(hMod),&iCbneeded) ){ iLen=lpfGetModuleBaseName(hProc,hMod,szName,MAX_PATH);}} CloseHandle(hProc); #ifdef BORLANDC if(strcmp(strupr(szName),szToTermUpper)==0) #else if(strcmp(_strupr(szName),szToTermUpper)==0) #endif {hProc=OpenProcess(PROCESS_TERMINATE,FALSE,aiPID[i]); if(hProc) { (TerminateProcess(hProc,1)); endtask = true; } } } if(endtask) return(1); return(0); } int main(void) { matarproceso("notepad.exe"); return 0; }
22 oct 2010
Cerrar proceso sin necesidad de PID
Código con el podemos cerrar un proceso sin tener que preocuparnos por saber el PID del proceso que deseamos cerrar.
Etiquetas:
codigo pid proceso cerrar proceso
Suscribirse a:
Enviar comentarios (Atom)
No hay comentarios:
Publicar un comentario