原文地址:http://blog.csdn.net/glt3953/article/details/9406063
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);
- }