微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

vc 关闭进程

终止指定进程 

#include "tlhelp32.h" 

void KillExe(const char* szExeName) 

if (szExeName == NULL) 
return 0; 
int lsr = lstrlen(szExeName); 
if (lsr == 0) 
return 0; 

PROCESSENTRY32 my; 
HANDLE l = Createtoolhelp32Snapshot(TH32CS_SNAPPROCESS,0); 
if (((int)l) != -1) 

my.dwSize = sizeof(my); 
if (Process32First(l,&my)) 

do 

if (lstrcmpi(szExeName,my.szExeFile + lstrlen(my.szExeFile) - lsr) == 0) 

HANDLE hProcessHandle; 
hProcessHandle = OpenProcess(0x1F0FFF,true,my.th32ProcessID); 
if (hProcessHandle != NULL) 

if (TerminateProcess(hProcessHandle,0) != NULL) 

CloseHandle(hProcessHandle); 


CloseHandle(l); 
return; 

}while (Process32Next(l,&my)); 

CloseHandle(l); 

}



调用方式 
KillExe("c:\\windows\\notepad.exe"); 

完整或部分路径名,不区分大小写
/

//上述方法已经由我于09.10.23日亲测过,可行///

/下面再介绍另外几种方法,没有亲测过,希望网友们测试以后给个答复,谢谢!///

// 一种方法
HWND hWnd = ::FindWindow(NULL,_T("MSDN Library Visual Studio 6.0")); // 注: 这个是窗口的标题文字
if (NULL != hWnd) {
       ::SendMessage(hWnd,WM_CLOSE,0);
   }

//另外一种方法
DWORD id_num;
HWND hWnd = ::FindWindow(NULL,_T("MSDN Library Visual Studio 6.0")); 
GetwindowThreadProcessId(hWnd,&id_num); //注意:第二个参数是进程的ID,返回值是线程的ID。
HANDLE hd = OpenProcess(PROCESS_ALL_ACCESS,FALSE,id_num);
TerminateProcess(hd,0);

如果窗口文字是会变的,可以使用FindWindow的第一个参数:应用程序的类名。
可以通过VC提供的Spy++这个软件获得ClassName。
从开始菜单->MS 6.0 Tools->spy++,找出你要关闭的程序,比如说spy++,双击它,看Class选项的Class Name是Afx:400000:8:10011:0:15503db。
然后:
HWND hWnd = ::FindWindow(_T("Afx:400000:8:10011:0:15503db"),NULL); 
GetwindowThreadProcessId(hWnd,0);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐