1.根据进程名称获得进程ID
bool CCommonTool::GetProcessIdByName(LPTSTR szProcessName, LPDWORD lpPID)
{
// 变量及初始化
STARTUPINFO st;
PROCESS_INFORMATION pi;
PROCESSENTRY32 ps;
HANDLE hSnapshot;
ZeroMemory(&st, sizeof(STARTUPINFO));
ZeroMemory(&pi, sizeof(PROCESS_INFORMATION));
st.cb = sizeof(STARTUPINFO);
ZeroMemory(&ps,sizeof(PROCESSENTRY32));
ps.dwSize = sizeof(PROCESSENTRY32);
// 遍历进程
hSnapshot = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0);
if(hSnapshot == INVALID_HANDLE_VALUE)
{
return FALSE;
}
if(!Process32First(hSnapshot,&ps))
{
return FALSE;
}
do
{
// 比较进程名
if(lstrcmpi(ps.szExeFile,szProcessName)==0)
{
// 找到了
*lpPID = ps.th32ProcessID;
CloseHandle(hSnapshot);
return TRUE;
}
}
while(Process32Next(hSnapshot,&ps));
// 没有找到
CloseHandle(hSnapshot);
return FALSE;
}
2.根据进程名称终止进程
bool CCommonTool::TerminateProcessByName( LPTSTR szProcessName )
{
DWORD nProcessID;
if (GetProcessIdByName(szProcessName, &nProcessID))
{
HANDLE hProcessHandle;
hProcessHandle = ::OpenProcess(PROCESS_TERMINATE, FALSE, nProcessID);
return ::TerminateProcess(hProcessHandle, 4);
}
return FALSE;
}
3.根据进程的窗口标题终止进程
bool CCommonTool::TerminateProcessByWindowTitle( LPTSTR szWindowTitle )
{
HANDLE hProcessHandle;
DWORD nProcessID;
HWND TheWindow;
TheWindow = ::FindWindow(NULL, szWindowTitle);
if (TheWindow)
{
::GetWindowThreadProcessId(TheWindow, &nProcessID);
hProcessHandle = ::OpenProcess(PROCESS_TERMINATE, FALSE, nProcessID);
return ::TerminateProcess(hProcessHandle, 4);
}
return FALSE;
}
4.将窗口名称为szWindowTitle的进程显示于最前端
void CCommonTool::BringWindowToTopByWindowTitle( LPTSTR szWindowTitle )
{
HWND TheWindow;
TheWindow = ::FindWindow(NULL, szWindowTitle);
if (TheWindow)
{
if (IsIconic(TheWindow))//窗口处于最小化状态
{
ShowWindow(TheWindow, SW_RESTORE);//窗口恢复为原来的状态
}
BringWindowToTop(TheWindow);
}
}