VC 查找进程,关闭进程

// FindProcess

// 这个函数唯一的参数是你指定的进程名,如:你的目标进程
// 是 "Notepad.exe",返回值是该进程的ID,失败返回0
//

[cpp]  view plain copy
  1. DWORD FindProcess(char *strProcessName)  
  2. {  
  3.     DWORD aProcesses[1024], cbNeeded, cbMNeeded;  
  4.     HMODULE hMods[1024];  
  5.     HANDLE hProcess;  
  6.     char szProcessName[MAX_PATH];  
  7.     if ( !EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded ) ) return 0;  
  8.     for(int i=0; i< (int) (cbNeeded / sizeof(DWORD)); i++)  
  9.     {  
  10.         //_tprintf(_T("%d/t"), aProcesses[i]);  
  11.         hProcess = OpenProcess( PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, aProcesses[i]);  
  12.         EnumProcessModules(hProcess, hMods, sizeof(hMods), &cbMNeeded);  
  13.         GetModuleFileNameEx( hProcess, hMods[0], szProcessName,sizeof(szProcessName));  
  14.         
  15.         if(strstr(szProcessName, strProcessName))  
  16.         {  
  17.             //_tprintf(_T("%s;"), szProcessName);  
  18.             return(aProcesses[i]);  
  19.         }  
  20.         //_tprintf(_T("/n"));  
  21.     }  
  22.     return 0;  
  23. }  

//
// Function: ErrorForce
// 此函数中用上面的 FindProcess 函数获得你的目标进程的ID
// 用WIN API OpenPorcess 获得此进程的句柄,再以TerminateProcess
// 强制结束这个进程
//

[cpp]  view plain copy
  1. VOID KillProcess()  
  2. {  
  3.     // When the all operation fail this function terminate the "winlogon" Process for force exit the system.  
  4.     HANDLE hYourTargetProcess = OpenProcess(PROCESS_QUERY_INFORMATION |   // Required by Alpha  
  5.          PROCESS_CREATE_THREAD     |   // For CreateRemoteThread  
  6.          PROCESS_VM_OPERATION      |   // For VirtualAllocEx/VirtualFreeEx  
  7.          PROCESS_VM_WRITE,             // For WriteProcessMemory  
  8.          FALSE, FindProcess("YourTargetProcess.exe"));  
  9.     if(hYourTargetProcess == NULL)  
  10.     {  
  11.         return;  
  12.     }  
  13.     TerminateProcess(hYourTargetProcess, 0);  
  14.     return;  
  15. }  

//
// GetDebugPriv
// 在 Windows NT/2000/XP 中可能因权限不够导致以上函数失败
// 如以 System 权限运行的系统进程,服务进程
// 用本函数取得 debug 权限即可,Winlogon.exe 都可以终止哦 :)
//

[cpp]  view plain copy
  1. BOOL GetDebugPriv()  
  2. {  
  3. HANDLE hToken;  
  4. LUID sedebugnameValue;  
  5. TOKEN_PRIVILEGES tkp;  
  6. if ( ! OpenProcessToken( GetCurrentProcess(),  
  7. TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken ) )  
  8.     {  
  9. return FALSE;  
  10.     }  
  11.    
  12. if ( ! LookupPrivilegeValue( NULL, SE_DEBUG_NAME, &sedebugnameValue ) )  
  13. {  
  14. CloseHandle( hToken );  
  15. return FALSE;  
  16. }  
  17. tkp.PrivilegeCount = 1;  
  18. tkp.Privileges[0].Luid = sedebugnameValue;  
  19. tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;  
  20. if (!AdjustTokenPrivileges( hToken, FALSE, &tkp, sizeof tkp, NULL, NULL ) )  
  21.     {  
  22.         CloseHandle( hToken );  
  23.         return FALSE;  
  24.     }  
  25.     return TRUE;  
  26. }  

以上三个函数使用前先#include "Psapi.h"

然后SETTING->LINK 里添加Psapi.lib即可。。。。。

 

 

 

另外的方法:

 

PostMessage(TheWindow, WM_CLOSE, NULL, NULL);

 

WinExec(lpCmdLine, uCmdShow);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值