当前位置: 首页 > article >正文

控制浏览器显示隐藏c++

#include <iostream>
#include <windows.h>
#include <tlhelp32.h>
#include <tchar.h>
#include <string>
#include <stdio.h>

//windows置顶窗体终极方案
LRESULT OnForceShow(HWND hWnd)
{
    HWND hForeWnd = NULL;
    DWORD dwForeID = 0;
    DWORD dwCurID = 0;

    hForeWnd = ::GetForegroundWindow();
    dwCurID = ::GetCurrentThreadId();
    dwForeID = ::GetWindowThreadProcessId(hForeWnd, NULL);
    ::AttachThreadInput(dwCurID, dwForeID, TRUE);
    ::ShowWindow(hWnd, SW_SHOWNORMAL);
    ::SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);
    ::SetWindowPos(hWnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);
    ::SetForegroundWindow(hWnd);
    ::AttachThreadInput(dwCurID, dwForeID, FALSE);

    return S_OK;
}

///< 通过进程ID获取窗口句柄
HWND GetWindowHwndByPorcessID(DWORD dwProcessID)
{
    DWORD dwPID = 0;
    HWND hwndRet = NULL;
    // 取得第一个窗口句柄
    HWND hwndWindow = ::GetTopWindow(0);
    while (hwndWindow)
    {
        dwPID = 0;
        // 通过窗口句柄取得进程ID
        DWORD dwTheardID = ::GetWindowThreadProcessId(hwndWindow, &dwPID);
        if (dwTheardID != 0)
        {
            // 判断和参数传入的进程ID是否相等
            if (dwPID == dwProcessID)
            {
                // 进程ID相等,则记录窗口句柄
                hwndRet = hwndWindow;
                break;
            }
        }
        // 取得下一个窗口句柄
        hwndWindow = ::GetNextWindow(hwndWindow, GW_HWNDNEXT);
    }
    // 上面取得的窗口,不一定是最上层的窗口,需要通过GetParent获取最顶层窗口
    HWND hwndWindowParent = NULL;
    // 循环查找父窗口,以便保证返回的句柄是最顶层的窗口句柄
    while (hwndRet != NULL)
    {
        hwndWindowParent = ::GetParent(hwndRet);
        if (hwndWindowParent == NULL)
        {
            break;
        }
        hwndRet = hwndWindowParent;
    }
    // 返回窗口句柄
    return hwndRet;
}

DWORD GetSesrvProcessId(const std::wstring& se_path,bool show) {
    HANDLE hProcessSnap;
    HANDLE hProcess;
    PROCESSENTRY32 pe32;
    // Take a snapshot of all processes in the system.
    hProcessSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    if (hProcessSnap == INVALID_HANDLE_VALUE) {
        return -1;
    }

    // Set the size of the structure before using it.
    pe32.dwSize = sizeof(PROCESSENTRY32);

    // Retrieve information about the first process,
    // and exit if unsuccessful
    if (!::Process32First(hProcessSnap, &pe32)) {
        
        ::CloseHandle(hProcessSnap);  // clean the snapshot object
        return -1;
    }

    // Now walk the snapshot of processes, and
    // display information about each process in turn
    do {
        hProcess = ::OpenProcess(PROCESS_ALL_ACCESS, FALSE, pe32.th32ProcessID);
        if (hProcess == NULL) {
            continue;
        }
            if (_wcsnicmp(pe32.szExeFile, se_path.c_str(), se_path.length()) == 0) {
               std::wcout << "kill by Process name  PID[" << pe32.th32ProcessID
                    << "] Processname: " << pe32.szExeFile <<"\n";
               HWND hwnd = GetWindowHwndByPorcessID(pe32.th32ProcessID);
               if (hwnd) {
                   ShowWindow(hwnd, show ? SW_SHOW :SW_HIDE);
                   if (show) {
                       OnForceShow(hwnd);
                   }
               }
                //return pe32.th32ProcessID;
            }
        

    } while (::Process32Next(hProcessSnap, &pe32));

    ::CloseHandle(hProcessSnap);
    return -1;
}

int main()
{

    GetSesrvProcessId(L"msedge.exe",false); //隐藏edge
    Sleep(3000);
    GetSesrvProcessId(L"msedge.exe",true); //显示edge
}


http://www.kler.cn/news/312141.html

相关文章:

  • MySQL 主从复制部署与优化
  • 部署k8s基础环境
  • Java Web实战:利用三层架构与Servlet构建登录注册模块
  • 828华为云征文 | 云服务器Flexus X实例:部署 AgentOps,全方位监测智能体
  • Find My资讯|AirPods 4标准版充电盒无扬声器,Find My查找不会发出声音
  • Vue3:编写一个插件(进阶)
  • neuroph建立简单BP网络
  • windows消息机制
  • Spring Boot 项目中整合 RabbitMQ,使用死信队列(Dead Letter Exchange, DLX)实现延迟队列功能
  • 设计模式 组合模式(Composite Pattern)
  • 【HTTP】认识 URL 和 URL encode
  • KL散度(Kullback-Leibler)
  • java框架
  • 深入理解 MySQL MVCC:多版本并发控制的核心机制
  • vmware,centos8(虚拟机) 的安装
  • Python Web开发中的持续集成与持续交付(CI/CD)
  • cassandra指定配置文件的docker启动方法
  • 【学术会议征稿】第四届计算机、信息工程与电子材料国际学术会议 (CTIEEM 2024)
  • 微信小程序能不能有一种公共的分包,能被普通的分包引用其资源?(内有解决方案)
  • 【测试】博客系统测试报告
  • docker面经
  • 【Mac】系统环境配置
  • mybatisplus分页查询学习
  • QT应用开发的C++功能框架以及实战入门开发项目场景
  • 计算机网路(应用层)
  • 中台架构下的数据仓库与非结构化数据整合
  • Nuxt Kit 中的插件:创建与使用
  • ffmpeg实现视频的合成与分割
  • 特征融合魔改,看这一篇就够了
  • Microsoft Edge 五个神级插件