您的位置:首页 > 其它

如何根据进程名字结束进程

2016-04-25 16:27 183 查看
结束一个进程,一般有两种情况:一种是有界面的,一种是没有界面的。

结束有界面的进程的思想就是:通过FindWindow查找到窗口,然后根据窗口获取进程id,然后就直接看代码:

//结束进程
BOOL KillProcess(LPCTSTR pszClassName, LPCTSTR pszWindowTitle)
{
HANDLE hProcessHandle;
ULONG nProcessID;
HWND TheWindow;
TheWindow = ::FindWindow( /*pszClassName*/NULL, pszWindowTitle );
::GetWindowThreadProcessId( TheWindow, &nProcessID );
hProcessHandle = ::OpenProcess( PROCESS_TERMINATE, FALSE, nProcessID );
return ::TerminateProcess( hProcessHandle, 2 );
}


具体可以参考:/article/1629450.html

如果是根据进程名字结束进程,结束系统进程模块的代码是用系统快照的原理得到进程的句柄,然后用TerminateProcess的方法结束掉进程的:

// killprocess_test.cpp : 定义控制台应用程序的入口点。
//
#include <stdio.h>
#include <string.h>
#include <windows.h>
#include <Tlhelp32.h>
#include <algorithm>
#include <vector>

//
void kill(int pid)
{
HANDLE hProcess = OpenProcess(PROCESS_TERMINATE, FALSE, pid);
BOOL bOkey = TerminateProcess(hProcess, 0);
if(bOkey)
{
WaitForSingleObject(hProcess, 1000);
CloseHandle(hProcess);
hProcess = NULL;
}
}
//
void TerminateProcessByName(PCWSTR name)
{
DWORD pid = 0;

// Create toolhelp snapshot.
HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
PROCESSENTRY32W process;
ZeroMemory(&process, sizeof(process));
process.dwSize = sizeof(process);

std::vector<DWORD> pids;
// Walkthrough all processes.
if (Process32FirstW(snapshot, &process))
{
do
{
// Compare process.szExeFile based on format of name, i.e., trim file path
// trim .exe if necessary, etc.
std::wstring szExeFile = process.szExeFile;
std::wstring szName = name;
/*std::transform(szExeFile.begin(), szExeFile.end(), szExeFile.begin(), towlower);
std::transform(szName.begin(), szName.end(), szName.begin(), towlower);*/

if (!wcscmp(szExeFile.c_str(), szName.c_str()))
{
pid = process.th32ProcessID;
pids.push_back(pid);
}
} while (Process32NextW(snapshot, &process));
}

CloseHandle(snapshot);

size_t size = pids.size();
for(size_t i = 0; i < size; ++i)
{
kill(pids[i]);
}
}

//
int main()
{
printf("this is test for kill process\n");

//注意区分大小写
TerminateProcessByName(L"KuGou.exe");

system("pause");

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: