首页 > 系统相关 >mfc进程方面处理

mfc进程方面处理

时间:2024-03-20 17:55:39浏览次数:18  
标签:mfc 处理 hWnd dwProcessId si hwndWindow 进程 pi NULL

// 获取某个进程ID
DWORD GetTaskManagerProcessId() {
	DWORD taskManagerProcessId = 0;
	PROCESSENTRY32 pe32;
	pe32.dwSize = sizeof(PROCESSENTRY32);

	HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
	if (hProcessSnap == INVALID_HANDLE_VALUE) {
	//	std::cerr << "CreateToolhelp32Snapshot failed: " << GetLastError() << std::endl;
	//	::MessageBox(L"123");
		return 0;
	}

	BOOL bMore = Process32First(hProcessSnap, &pe32);
	while (bMore) {
		if (lstrcmpi(pe32.szExeFile, _T("BCompare.exe")) == 0) {
			taskManagerProcessId = pe32.th32ProcessID;
			break;
		}
		bMore = Process32Next(hProcessSnap, &pe32);
	}

	CloseHandle(hProcessSnap);
	return taskManagerProcessId;
}

  

// 获取进程句柄
struct ProcessWindow
{
    DWORD dwProcessId;
    HWND hwndWindow;
};
HWND parentWindow;
PROCESS_INFORMATION pi;
// 查找进程主窗口的回调函数
BOOL CALLBACK EnumWindowCallBack(HWND hWnd, LPARAM lParam)
{
    ProcessWindow* pProcessWindow = (ProcessWindow*)lParam;

    DWORD dwProcessId;
    GetWindowThreadProcessId(hWnd, &dwProcessId);

    // 判断是否是指定进程的主窗口
    if (pProcessWindow->dwProcessId == dwProcessId && IsWindowVisible(hWnd) && GetParent(hWnd) == NULL)
    {
        pProcessWindow->hwndWindow = hWnd;
        
        HANDLE hProcess = pi.hProcess;
        HANDLE hThread = pi.hThread;

        // 调整外部程序的窗口风格,以隐藏标准窗口
        SetWindowLongPtr(pProcessWindow->hwndWindow, GWL_STYLE, GetWindowLongPtr(pProcessWindow->hwndWindow, GWL_STYLE) & ~WS_CAPTION);

        // 设置外部程序的父窗口
        SetParent(hWnd, parentWindow);

        // 继续执行外部程序
        ResumeThread(hThread);

        // 清理资源
        CloseHandle(hProcess);
        CloseHandle(hThread);

        return FALSE;
    }

    return TRUE;
}
HWND CreateMyProcess()
{

    
    STARTUPINFO si;
    ::ZeroMemory(&si, sizeof(si));
    si.cb = sizeof(si);
    //设置进程创建时不显示窗口
    si.dwFlags = /*STARTF_USEPOSITION*/STARTF_USESHOWWINDOW;
    /*startupInfo.dwX = 600;
    startupInfo.dwY = 900;*/
    si.wShowWindow = SW_HIDE;

    if (::CreateProcess(L"D:\\VS2019\\nestexe3\\nestexe3\\NetAssist.exe", NULL,
        NULL,  // process security
        NULL,  // thread security
        FALSE, // no inheritance
        0,     // no startup flags
        NULL,  // no special environment
        NULL,  // default startup directory
        &si,
        &pi))
    {
        ProcessWindow procwin;
        procwin.dwProcessId = pi.dwProcessId;
        procwin.hwndWindow = NULL;

        // 等待新进程初始化完毕
        WaitForInputIdle(pi.hProcess, 5000);

        // 查找主窗口
        EnumWindows(EnumWindowCallBack, (LPARAM)&procwin);

        return procwin.hwndWindow;
    }
    return NULL;
}

 

标签:mfc,处理,hWnd,dwProcessId,si,hwndWindow,进程,pi,NULL
From: https://www.cnblogs.com/leochan007/p/18085767

相关文章

  • 【Python使用】python高级进阶知识md总结第5篇:获取进程编号,1. 获取进程编号的目的【
    python高级进阶全知识知识笔记总结完整教程(附代码资料)主要内容讲述:操作系统,虚拟机软件,Ubuntu操作系统,Linux内核及发行版,查看目录命令,切换目录命令,绝对路径和相对路径,创建、删除文件及目录命令,复制、移动文件及目录命令,终端命令格式的组成,查看命令帮助。HTTP请求报文,HTTP响应报文......
  • k3s 错误以及异常处理
    1."Unabletoauthenticatetherequest"err="[x509:certificatehasexpiredorisnotyetvalid:currenttim......seehttps://github.com/k3s-io/k3s/issues/5163#查看证书kubectl--insecure-skip-tls-verifygetsecret-nkube-systemk3s-servi......
  • 操作系统综合题之“采用记录型信号量机制实现上述两个进程的同步算法(代码补充)”
    1.问题:设有无穷多个整数缓冲区(即为无界缓冲池),A进程从输入设备逐个地读入整数并写入缓冲区,B进程则逐个地从缓冲区取出整数进行打印。其中存放整数的变量为item,缓冲区名为buffer,读取过程使用函数getAItem(int*item)来完成,而打印整数使用函数printAItem(intitem)来完成。请用记录......
  • 操作系统综合题之“采用记录型信号量机制实现爸爸与妈妈进程的同步(爸妈擀饼问题)”
    1.问题:爸爸擀面,妈妈烙饼,面板上只能容纳两张擀好的饼,只有当面板上有空闲空间时,爸爸才能把擀好的饼放在面板上。只有当面板上有时,妈妈才能从面板上取饼。试采用记录型信号量机制实现爸爸与妈妈进程的同步答:设置两个信号量资源:varempty,full:semaphore初始两个资源信号量:empty.......
  • Linux进程控制
    1.进程创建fork函数#include<unistd.h>pid_tfork(void);返回值:自进程中返回0,父进程返回子进程id,出错返回-1进程调用fork,当控制转移到内核中的fork代码后,内核做:1.分配新的内存块和内核数据结构给子进程2.将父进程部分数据结构内容拷贝至子......
  • 达梦归档归档日志丢失不连续的备份处理
    环境:OS:Centos7DB:DM8 1.归档目录看不出连续性[dmdba@host01arch]$ls-altotal148drwxr-xr-x2dmdbadinstall250Mar2014:09.drwxr-xr-x7dmdbadinstall67Mar1514:47..-rw-r--r--1dmdbadinstall118784Mar2014:03ARCHIVE_LOCAL1_0x61603......
  • 用Compute Shader处理图像数据后在安卓机上不能正常显示渲染纹理
    1)用ComputeShader处理图像数据后在安卓机上不能正常显示渲染纹理2)折叠屏适配问题3)Prefab对DLL中脚本的引用丢失4)如何优化UnityVolumeManager中的ReplaceData这是第378篇UWA技术知识分享的推送,精选了UWA社区的热门话题,涵盖了UWA问答、社区帖子等技术知识点,助力大家更全面地掌握......
  • python连接clickhouse-当密码中存在特殊字符比如@时处理方法
    我是使用clickhouse_sqlalchemy库来使用clickhous的。我的密码是:'Lovedan@971220'连接clickhous执行sql语句时候,会报错认证失败:Origexception:Code:516,e.displayText()=DB::Exception:default:Authenticationfailed:passwordisincorrectorthereisnouserwith......
  • webpack5零基础入门-11处理html资源
    1.目的主要是为了自动引入打包后的js与css资源,避免手动引入2.安装相关包npminstall--save-devhtml-webpack-plugin3.引入插件constHtmlWebpackPlugin=require('html-webpack-plugin');4.添加插件(通过new方法调用)/**插件*/plugins:[//plugin配置......
  • SpringBoot添加跨域处理
    配置类实现WebMvcConfigurer接口重写addCorsMappings(CorsRegistryregistry)方法用registry对象添加映射路径、是否发送cookie、设置放行哪些原始域、放行哪行请求方法、放行哪些请求头信息、暴漏哪些请求头部信息@ConfigurationpublicclassCorsConfigimplements......