首页 > 编程语言 >C# WinForms 中嵌入 EXE 程序 打开外部的exe程序

C# WinForms 中嵌入 EXE 程序 打开外部的exe程序

时间:2024-10-11 09:34:30浏览次数:1  
标签:IntPtr embeddedProcess EXE 窗口 C# 程序 dll int user32

 public  class ProcessEmbedder
 {
     // 常量定义
     private const int GWL_STYLE = -16; // 窗口样式
     private const int WS_VISIBLE = 0x10000000; // 可见窗口样式

     // 导入user32.dll中的SetParent函数,用于设置窗口的父窗口
     [DllImport("user32.dll", EntryPoint = "SetParent")]
     private static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);

     // 导入user32.dll中的ShowWindow函数,用于显示窗口
     [DllImport("user32.dll", EntryPoint = "ShowWindow")]
     private static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);

     // 导入user32.dll中的MoveWindow函数,用于移动和调整窗口大小
     [DllImport("user32.dll", SetLastError = true)]
     private static extern bool MoveWindow(IntPtr hWnd, int X, int Y, int nWidth, int nHeight, bool bRepaint);

     // 存储嵌入的进程
     private static Process embeddedProcess;
     /// <summary>
     /// 嵌入指定路径的进程窗口到当前的Panel控件中
     /// </summary>
     /// <param name="processPath">需要嵌入的进程的可执行文件路径</param>
     public  void EmbedProcess(Form frm, string processPath)
     {
         // 创建进程启动信息,并设置相关属性
         ProcessStartInfo startInfo = new ProcessStartInfo(processPath)
         {
             UseShellExecute = false, // 不使用操作外壳来启动
             CreateNoWindow = true // 不创建新窗口
         };

         // 启动进程并保存引用
         embeddedProcess = Process.Start(startInfo);

         // 等待进程创建窗口
         embeddedProcess.WaitForInputIdle();

         // 获取子窗口句柄
         IntPtr childHandle = embeddedProcess.MainWindowHandle;

         // 将子窗口的父窗口设置为当前的Form控件
         SetParent(childHandle, frm.Handle);

         // 显示子窗口
         ShowWindow(childHandle, 1); // 1代表SW_SHOWNORMAL

         // 移动并调整子窗口的大小,以填充当前的Form控件
         MoveWindow(childHandle, 0, 0, frm.Width, frm.Height, true);
     }
     /// <summary>
     /// 关闭嵌入的进程
     /// </summary>
     public  void CloseEmbeddedProcess()
     {
         if (embeddedProcess != null && !embeddedProcess.HasExited)
         {
             embeddedProcess.Kill(); // 终止进程
         }
     }
 }

打开计算器

 new Commons.ProcessEmbedder().EmbedProcess(this,"calc.exe");

 

标签:IntPtr,embeddedProcess,EXE,窗口,C#,程序,dll,int,user32
From: https://www.cnblogs.com/LuoCore/p/18457742

相关文章

  • rocky9 修改网卡ip地址的方法2024
    2024-10-11 rocky9修改网卡ip地址的方法#修改配置文件vim/etc/NetworkManager/system-connections/ens160.nmconnection[connection]id=ens160uuid=ebc91b5b-ef24-37ca-8cc8-c0f6e43172fatype=ethernetautoconnect-priority=-999interface-name=ens160timestam......
  • 设计方案:283-基于XILINX K7 XC7K325T的PCIe_CameraLink图像模拟源
    ​一、板卡概述       本图像模拟源板卡基于Xilinx公司的FPGAXC7K325T-2FFG900芯片,pin_to_pin兼容FPGAXC7K410T-2FFG900。主要的功能是实现系统能够接收外部相机的噪声数据,经过图像转换板拟通过PCI-E接口输入到上位机。​编辑 二、功能和技术指标:    1、用于......
  • 帝国cms网站首页错误代码
    如果帝国CMS网站首页出现了错误代码,你可以根据不同的错误类型来处理:HTTP状态码例如404NotFound表示页面未找到,可能是首页文件丢失或链接错误。500InternalServerError表示服务器内部错误,通常与程序代码或服务器配置有关。PHP错误如果页面显示了具体的PHP错误信息......
  • Codeforces Round 975 (Div. 2)
    Codeforces975div2A.MaxPlusSize点击查看代码voidsolve(){intn;cin>>n;intimax1=0,imax2=0;for(inti=1;i<=n;i++){intx;cin>>x;if(i%2)imax1=max(imax1,x);elseimax2=max(imax2,x);}if(!n%2)cout......
  • 聊聊git push到远程服务器出现RPC failed问题
    前言最近小组成员跟我说,他git提交不了代码。我问了下原因,他说他代码一提交就会报代码语言:txt复制error:RPCfailed;HTTP413curl22TherequestedURLreturnederror:413fatal:theremoteendhungupunexpectedlyfatal:theremoteendhungupunexpected......
  • 程序设计基础I-实验6 二维数组
    7-1sdut-C语言实验-求一个3*3矩阵对角线元素之和给定一个3*3的矩阵,请你求出对角线元素之和。输入格式:按照行优先顺序输入一个3*3矩阵,每个矩阵元素均为整数。输出格式:从左下角到右上角这条对角线上的元素之和。输入样例:123345601输出样例:在这里给出相应......
  • 程序设计基础I-实验7 函数(函数题)
    6-1sdut-C语言实验-计算组合数计算组合数。C(n,m),表示从n个数中选择m个的组合数。计算公式如下:若:m=0,C(n,m)=1否则,若n=1,C(n,m)=1否则,若m=n,C(n,m)=1否则C(n,m)=C(n-1,m-1)+C(n-1,m).函数接口定义:在这里描述函数接口。例如:intfun(intn,intm);其中n和m都......
  • SketchUp Pro 2024 for Mac 3D建模 草图设计大师软件安装【保姆级教程,简单小白轻松上
    Mac分享吧文章目录SketchUpPro3D建模草图设计大师软件安装完成,软件打开效果一、Mac中安装SketchUpPro3D建模草图设计大师软件——v241️⃣:下载软件2️⃣:安装软件,将安装包从左侧拖入右侧文件夹中3️⃣:应用程序,打开安装的应用软件文件夹,运行SketchUp.app4️⃣:任选示例模型,......
  • 程序设计基础I-实验7 函数(编程题)
    7-1sdut-C语言实验—计算表达式计算下列表达式值:输入格式:输入x和n的值,其中x为非负实数,n为正整数。输出格式:输出f(x,n),保留2位小数。输入样例:32输出样例:在这里给出相应的输出。例如:2.00#include<stdio.h>#include<math.h>doublef(doublex,intn){......
  • 程序设计基础I-实验8 指针(函数题)
    6-1sdut-C语言实验-n个数的排序Qiao当上了体育委员,现在老师让他去给班级里的人排队,Qiao刚学了排序,所以他想以这种方式给班级里的人排队(从矮到高),他想知道排序完成后的结果。函数接口定义:voidsort(int*p,intn);其中p和n都是用户传入的参数。p的值为传递过来的地址;......