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. 【Ubuntu】vim-9.1.0821 编译安装

    [Ubuntu]vim-9.1.0821 编译安装 零.起因 由于 Ubuntu 库中的vim版本只有8点几,满足不了需求,故需要自己编译安装更新的版本,本文介绍如何安装更新的vim版本. 壹.操作步 ...

  2. Ubuntu 分辨率设置不了

    最近换了个显示器,Ubuntu下竟然只能显示低分辨率,瞬间zhuo ji了,解决,留爪. 问题就不多说了,直接记录正题, 主要涉及2个命令cvt和xrandr, 主要注意的一点是:刚刚开始直接用命令写 ...

  3. python API 之 fastapi

    为什么选择 FastAPI? 高性能:基于 Starlette 和 Uvicorn,支持异步请求处理 开发效率:自动交互文档.类型提示.代码自动补全 现代标准:兼容 OpenAPI 和 JSON Sc ...

  4. volatile修饰全局变量,可以保证线程并发安全吗?

    今天被人问到volatile能不能保证并发安全? 呵,这能难倒我? 直接上代码: public class ThreadTest { // 使用volatile修饰变量 private static ...

  5. IDEA强制注册登录版本号:IntelliJ IDEA 2021.2.2

    建议采用 IntelliJ IDEA 2021.2.2 版本进行  Evaluate for free  试用 IntelliJ IDEA 2021.3.3  以前的版本可以不用注册登录idea账户, ...

  6. 微软正式发布 .NET 10 Preview 3

    2025年4月11日,.NET团队在博客上宣布了.NET 10 Preview 3的正式发布,文章参见:https://devblogs.microsoft.com/dotnet/dotnet-10- ...

  7. Windows开机执行bat脚本

    1.编写好bat脚本 2.将脚本复制到: C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp

  8. 保存计算过程的计算器——java实现

    一.设计模型 按照MVC-Model View Control(模型,视图,控制器)的设计思想展开程序的设计和代码的编写.数据模型部分相当于MVC中的Model角色,视图设计部分给出的界面部分相当于M ...

  9. 移动开发webapp开发常用meta设置手机浏览器全屏模式,webappmeta

    1.WebApp全屏模式: <meta name="viewport" content="width=device-width,initial-scale=1.0, ...

  10. strftime()函数的用法

    strftime()函数的用法 strftime()函数可以把YYYY-MM-DD HH:MM:SS格式的日期字符串转换成其它形式的字符串.strftime()的语法是strftime(格式, 日期/ ...