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");

C# WinForms 中嵌入 EXE 程序 打开外部的exe程序的更多相关文章

  1. C#判断程序调用外部的exe已结束

    来源: C#如何判断程序调用的exe已结束 方法一:这种方法会阻塞当前进程,直到运行的外部程序退出 System.Diagnostics.Process exep = System.Diagnosti ...

  2. ASP.NET Core 使用外部登陆提供程序登陆的流程,以及身份认证的流程 (转载)

    阅读目录 在Asp.Net Core 中使用外部登陆(google.微博...) 中间件管道 The Authentication Middleware The Challenge 与认证中间件进行交 ...

  3. 微信小程序开发——打开另一个小程序

    微信小程序打开另一个小程序,有两种方法:1.超链接:2.点击按钮. 全局配置: 跳转到其他小程序,需要在当前小程序全局配置中配置需要跳转的小程序列表,代码如下: App.json { ... &quo ...

  4. Net Core 使用外部登陆提供程序登陆的流程,以及身份认证的流程

    在Asp.Net Core 中使用外部登陆(google.微博...)   原文出自Rui Figueiredo的博文<External Login Providers in ASP.NET C ...

  5. Qt界面中嵌入其他exe程序的界面,使用Qt5

    下面用一个小例子来演示如何在Qt的界面中嵌入其他exe程序的界面,最终效果如下图所示.本文参考了 http://blog.csdn.net/jiaoyaziyang/article/details/4 ...

  6. C# 以嵌入到窗体的方式打开外部exe

    using System; using System.Collections.Generic; using System.Text; using System.Diagnostics; using S ...

  7. WPF中嵌入普通Win32程序的方法

    公司现在在研发基于.Net中WPF技术的产品,由于要兼容旧有产品,比如一些旧有的Win32程序.第三方的Win32程序等等,还要实现自动登录这些外部Win32程序,因此必须能够将这些程序整合到我们的系 ...

  8. MFC 打开外部EXE文件的三种方法

    目前知道三种方式:WinExec,ShellExecute ,CreateProcess,别人已经总结的很好了<vc中调用其他应用程序的方法(函数) winexec,shellexecute , ...

  9. 在C#中调用另一个应用程序或命令行(.exe 带参数)<zz>

    在.net中使用system.diaglostics.Process可以用来调用另一个命令行或程序. using   System.Diagnostics;     如果是dos     Proces ...

  10. C#WinForm应用程序中嵌入ECharts图表

    C#WinForm应用程序中嵌入ECharts图表 程序运行效果: 下载ECharts: 官网下载ECharts :http://echarts.baidu.com/download.html 或者直 ...

随机推荐

  1. 新装的 MySQL 不允许远程连接

    新装的 MySQL 通常会出现这样的情况:无法远程连接,但是本地连接是正常的. 问题原因 新装的 MySQL 通常默认的用户是 root, 而为了安全起见, root 用户是不允许远程连接. mysq ...

  2. 再说cxGrid主从表相关

    查了那么多叽叽歪歪的资料:masterView的key,从表key和detailkey以及从表需要排序. 注意设定参数后,最后active数据集.这里有个顺序问题,否则会增加随机新 回到原点看随机he ...

  3. HTB打靶记录-TheFrizz

    信息收集 nmap -sV -sC -O 10.10.11.60 Nmap scan report for 10.10.11.60 Host is up (0.63s latency). Not sh ...

  4. Clion搭建C++开发环境

    1.下载和安装MinGW 1)下载链接:http://www.mingw.org/ 2)选择安装目录,目录尽可能简单(如:D:\MinGW)且不要包含中文和空格 3)添加相关的包 所需的包如下:min ...

  5. mysql日期格式说明

    mysql日期格式说明 %a:缩写星期名 %b:缩写月名 %c:月,数值 %D:带有英文前缀的月中的天 %d:月的天,数值(00-31) %e:月的天,数值(0-31) %f:微秒 %H:小时(00- ...

  6. .NET 原生驾驭 AI 新基建实战系列(四):Qdrant ── 实时高效的向量搜索利器

    向量数据库作为一种专为现代AI应用设计的新型存储技术,能够高效地管理和检索高维数据,成为智能应用开发中的关键基础设施.本文将深入探讨 Qdrant 这个开源.高性能的向量数据库,重点介绍其如何与 .N ...

  7. 从零开始学Flink:开启实时计算的魔法之旅

    在凌晨三点的数据监控大屏前,某电商平台的技术负责人突然发现一个异常波动:支付成功率骤降15%.传统的数据仓库此时还在沉睡,而基于Flink搭建的实时风控系统早已捕捉到这个信号,自动触发预警机制.当运维 ...

  8. 时间工具之“Java8 LocalDate 根据给定的日期,获取该日期上一周的周一周日,以及TemporalAdjusters的API”

    一.场景 我们的周报需要获取该月的第一个周的星期一和星期日,用于计算该星期的功能业绩(如:上产品数量) 2022-04-25 00:00:00 到 2022-05-01 23:59:592022-05 ...

  9. 遇到的问题之“input的值感觉没有设置上去,却有值”

    案例一.批量设置参数 1.被设置的框 改为下拉框的问题可参考:https://www.cnblogs.com/saoge/p/16985318.html <td> <app:inpu ...

  10. TVM相关

    TVM介绍 为解决深度学习框架和硬件后端适配问题,华盛顿大学的陈天奇等人提出了TVM. TVM是一个端到端的全栈编译器,包括统一的IR堆栈和自动代码生成方法,其主要功能是优化在CPU.GPU和其他定制 ...