C/C++ Windows进程操作

11 篇文章 2 订阅

所用到的头文件:

#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是一个结构体类型,含有的数据成员是
th32ProcessIDszExeFile,(进程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

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值