{
//创建进程快照(TH32CS_SNAPPROCESS表示创建所有进程的快照)
HANDLE hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0)
//PROCESSENTRY32进程快照的结构体
PROCESSENTRY32 pe
//实例化后使用Process32First获取第一个快照的进程前必做的初始化 *** 作
pe.dwSize = sizeof(PROCESSENTRY32)
//下面的IF效果同:
//if(hProcessSnap == INVALID_HANDLE_VALUE) 无效的句柄
if(!Process32First(hSnapShot,&pe))
{
return FALSE
}
//将字符串转换为小写
strProcessName.MakeLower()
//如果句柄有效 则一直获取下一个句柄循环下去
while (Process32Next(hSnapShot,&pe))
{
//pe.szExeFile获取当前进程的可执行文件名称
CString scTmp = pe.szExeFile
//将可执行文件名称所有英文字母修改为小写
scTmp.MakeLower()
//比较当前进程的可执行文件名称和传递进来的文件名称是否相同
//相同的话Compare返回0
if(!scTmp.Compare(strProcessName))
{
//从快照进程中获取该进程的PID(即任务管理器中的PID)
DWORD dwProcessID = pe.th32ProcessID
HANDLE hProcess = ::OpenProcess(PROCESS_TERMINATE,FALSE,dwProcessID)
::TerminateProcess(hProcess,0)
CloseHandle(hProcess)
return TRUE
}
scTmp.ReleaseBuffer()
}
strProcessName.ReleaseBuffer()
return FALSE
}
直接结束CMD.exe进程就行了BOOL KillProcess ( HWND hWnd, LPTSTR lpAppName )
{
TCHAR szApp [MAX_PATH] = _T("")
_tcscpy ( szApp, lpAppName )
PROCESSENTRY32 pe32
pe32.dwSize = sizeof( pe32 )
HANDLE hProcessSnap = ::CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 )
if ( hProcessSnap == INVALID_HANDLE_VALUE )
{
MessageBox( hWnd, L"Can't Create Snapshot", L"System Info.", NULL )
return FALSE
}
BOOL bNext = ::Process32First( hProcessSnap, &pe32 )
while( bNext )
{
if( _tcscmp ( CharLower ( pe32.szExeFile ), CharLower ( szApp )) == 0 )
{
HANDLE hProcess = OpenProcess( PROCESS_ALL_ACCESS, FALSE, pe32.th32ProcessID )
TerminateProcess( hProcess, 0 )
}
bNext = ::Process32Next( hProcessSnap,&pe32 )
}
CloseHandle( hProcessSnap )
return TRUE
}
基于对话框程序的话,刚建的工程主界面上有一个确认和取消,运行时点其中任意一个都会退出应用程序其他工程比如单文档,如果是新建的对话框,那么在这个对话框中得添加的一个按钮,然后里面的单击代码写exit(0) 这样按这个按钮就可以退出了
另外其实任何类型的工程的任何消息处理函数中有这条语句的话都会直接退出
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)