所用到的头文件:
#include <Windows.h>
#include <Tlhelp32.h>
1.遍历并处理所有进程
void dispose_AllProcess(void (*func)(PROCESSENTRY32&))
{
HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); //创建当前系统的进程快照
if (snapshot == INVALID_HANDLE_VALUE) //快照拍摄失败,返回空句柄
return;
PROCESSENTRY32 process; //初始化一个进程对象
SecureZeroMemory(&process, sizeof(process));
process.dwSize = sizeof(process);
int POK = Process32First(snapshot, &process);
for (; POK; POK = Process32Next(snapshot, &process))
func(process);
//process.th32ProcessID, process.szExeFile
CloseHandle(snapshot);
}
这里传入一个回调函数的地址,方便对每个进程进行自定义的处理
其中PROCESSENTRY32
是一个结构体类型,含有的数据成员是
th32ProcessID
和szExeFile
,(进程ID和进程名)
比如可以通过
printf("%d %ls\n", process.th32ProcessID, process.szExeFile);
打印出一个进程的ID和名称
2. 杀死进程
void KillProcess(PROCESSENTRY32 & process) //结束进程
{
HANDLE hd=OpenProcess(PROCESS_TERMINATE, FALSE, process.th32ProcessID);
TerminateProcess(hd,0);
}
这个配合1中的遍历所有进程使用就是:
dispose_AllProcess(KillProcess);
3. 通过进程名获得进程ID
DWORD GetProcessIDbyName(const char * name)
{
int num = MultiByteToWideChar(0, 0, name, -1, NULL, 0);
wchar_t* w_name = new wchar_t[num];
MultiByteToWideChar(0, 0, name, -1, w_name, num);
//LPCWSTR w_name = (LPCWSTR)name; //这是错误的写法,不能强制类型转换
//printf("%ls", w_name);
DWORD pid = 0;
HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); //创建当前系统的进程快照
if (snapshot == INVALID_HANDLE_VALUE)//快照拍摄失败
return -1;
PROCESSENTRY32 process;
SecureZeroMemory(&process, sizeof(process));
process.dwSize = sizeof(process); //初始化一个进程对象
int POK = Process32First(snapshot, &process); //获取第一个进程
for (; POK; POK = Process32Next(snapshot, &process)) //遍历所有进程
if ( !lstrcmpi(process.szExeFile,w_name))
{
pid = process.th32ProcessID;
//printf("%d\n", pid);
break;
}
CloseHandle(snapshot);
return pid;
}
4. 隐藏/显示指定句柄的窗口
void hide_Window(HWND hW) {
ShowWindow(hW, SW_HIDE);
}
void show_Window(HWND hW)
{
ShowWindow(hW, SW_SHOW);
}
如果要隐藏自身窗口,可以用GetForegroundWindow()
来获取自身句柄
,即:
ShowWindow(GetForegroundWindow(),SW_HIDE);
SW_HIDE
还可以被替换成SW_MAXIMIZE
最大化窗口 , SW_MINIMIZE
最小化窗口,等值,详情见 ShowWindow function - MSDN