读书人

VC封闭外部exe程序的方法

发布时间: 2012-11-08 08:48:12 作者: rapoo

VC关闭外部exe程序的方法

终止指定进程?

#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, 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, &id_num); //注意:第二个参数是进程的ID,返回值是线程的ID。
HANDLE hd = OpenProcess(PROCESS_ALL_ACCESS,FALSE, id_num);
TerminateProcess(hd, 0);

读书人网 >VC/MFC

热点推荐