#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.
No hay comentarios:
Publicar un comentario