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. 利用标准IO函数接口实现计算一个本地磁盘某个文件的大小,文件名通过命令行进行传递

    利用标准IO函数接口实现计算一个本地磁盘某个文件的大小,文件名通过命令行进行传递 方法一:使用ftell函数直接获取光标偏移量 相关标准库函数 SYNOPSIS #include <stdio. ...

  2. Quartz.NET - 教程 2: 作业和触发器

    译者注: 目录在这 Quartz.NET 3.x 教程 原文在这 Lesson 2: Jobs And Triggers Quartz API Quartz API 的主要接口和类如下: ISched ...

  3. study Python3【2】导入模块

    import 与 from...import 在 python 用 import 或者 from...import 来导入相应的模块. 将整个模块(somemodule)导入,格式为: import ...

  4. datasnap的监督功能【2】-管理Session

    1.服务端的Session是有TDSSession定义的.TDSSession提供了许多有用的方法和特性,再开发室取得服务or重要信息. 如Session状态.安排Session独享定时or自动执行工 ...

  5. chatops

    ChatOps是什么? ChatOps, 简单地说,这是一种方法,允许团队以聊天室的方式来协作和管理其基础结构.代码和数据的许多方面.通过使用聊天机器人和脚本,团队可以执行命令.查询信息,并将知识分发 ...

  6. 配置Thymeleaf模板引擎

    1).thymeleaf-starter: 关闭缓存 2).静态资源都放在static文件夹下就可以按照路径直接访问 3).页面放在templates下,直接访问 springboot ,访问项目的时 ...

  7. CentOS linux安装jdk

    1.查找系统是否安装jdk java -versionrpm -qa | grep jdk 2.卸载原jdk rpm -e --nodeps jdk..(这里为自己jdk路径) 3.下载指定版本rpm ...

  8. Mouse Down鼠标操作指令的用法

    如下图 暂无评论的按钮在整页下方,需要拖动页面才会显示出这个按钮,否则不可点击 Mouse Down  提供拖动页面的能提 这个方法因selenium2library和AutoItLibrary 都有 ...

  9. web自动化的鼠标操作

    有些场景不适合点击或进行某些操作,可运用action类模拟鼠标操作.在操作一个页面元素时有时需要一连串的动作来配合的时候,可以使用action来完成. Actions actions= new Act ...

  10. Web前端入门第 41 问:神奇的 transform 改变元素形状,matrix3d 矩阵变换算法演示

    CSS transform 属性中文翻译过来是 变换,始终觉得翻译差那么一点意思.它可以用来改变元素形状,比如旋转.缩放.移动.倾斜等,就是它可以把元素各种拿捏~ transform 特性是在不改变自 ...