C# winform 将其他程序嵌入Form窗体
嵌入类
public class ExeImpaction
{
public void FrmClosing()
{
try
{
if (!process.HasExited)
process.Kill();
}
catch
{
}
} public void FrmResize(Form frm)
{
if (this.appWin != IntPtr.Zero)
MoveWindow(appWin, , , frm.Width, frm.Height, true);
} Process process = null;
IntPtr appWin; [DllImport("user32.dll", SetLastError = true)]
private static extern long SetParent(IntPtr hWndChild, IntPtr hWndNewParent);
[DllImport("user32.dll", SetLastError = true)]
private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport("user32.dll", SetLastError = true)]
private static extern long SetWindowPos(IntPtr hwnd, long hWndInsertAfter, long x, long y, long cx, long cy, long wFlags);
[DllImport("user32.dll", SetLastError = true)]
private static extern bool MoveWindow(IntPtr hwnd, int x, int y, int cx, int cy, bool repaint); /// <summary>
/// 打开一个exe程序 并嵌入到窗体
/// </summary>
/// <param name="parentFrm">父类窗体</param>
/// <param name="exePath">程序路径</param>
/// <param name="frmCaption">窗体名称</param>
/// <param name="args">参数们</param>
/// <param name="waitSecond">等待时间(单点登录时如果窗体还没创建得到句柄是0无法显示窗体要等到他生成再显示)</param>
/// <returns></returns>
public string ExecExe(Form parentFrm, string exePath, string frmCaption, string args = "", int waitSecond = )
{
string errStr = "";
try {
ProcessStartInfo info = null; if ((args ?? "").ToString() != "")
info = new ProcessStartInfo(exePath, args);
else
info = new ProcessStartInfo(exePath); info.UseShellExecute = true;
info.WindowStyle = ProcessWindowStyle.Minimized; process = System.Diagnostics.Process.Start(info); Thread.Sleep(waitSecond * ); process.WaitForInputIdle(); appWin = FindWindow(null, frmCaption); appWin = FindWindow(null, frmCaption); }
catch (Exception ex)
{
errStr = ex.Message;
} SetParent(appWin, parentFrm.Handle);
MoveWindow(appWin, , , parentFrm.Width, parentFrm.Height, true); return errStr;
} }
用法
public partial class NewTest : Form
{
public ExeImpaction exeIm { get; set; }
public NewTest()
{
InitializeComponent(); string path = System.Environment.CurrentDirectory+ @"\人事管理\ProRSGL.exe";
textBox1.Text = path;
textBox2.Text = "人事管理系统"; exeIm = new ExeImpaction();
this.Resize += NewTest_Resize;
this.FormClosing += NewTest_FormClosing;
} private void NewTest_FormClosing(object sender, FormClosingEventArgs e)
{
exeIm.FrmClosing();
} private void NewTest_Resize(object sender, EventArgs e)
{
exeIm.FrmResize(this);
} private void button1_Click(object sender, EventArgs e)
{
exeIm.ExecExe(this, @textBox1.Text, @textBox2.Text, "000,891560,1808290021,123124121243123123", );//vb程序单点登录这里的参数自己定义的
//其他程序
//exeIm.ExecExe(this, @textBox1.Text, @textBox2.Text, @textBox3.Text, 1);
} private void newFormToolStripMenuItem_Click(object sender, EventArgs e)
{
Form frm = new Form();
frm.MdiParent = this;
frm.Show();
} private void 测试ToolStripMenuItem_Click(object sender, EventArgs e)
{ // Process process = System.Diagnostics.Process.Start(@textBox1.Text);
Process process = System.Diagnostics.Process.Start(@"D:\我的项目\application1.exe", "000,891560,1808290021,123124121243123123"); } private void button2_Click(object sender, EventArgs e)
{
OpenFileDialog ofd = new OpenFileDialog();
if (ofd.ShowDialog() == DialogResult.OK)
textBox1.Text = ofd.FileName;
}
}
C# winform 将其他程序嵌入Form窗体的更多相关文章
- WinForm中如何实现在容器控件中嵌入form窗体(panel与子窗体)
今天在做项目时候遇到一个问题,窗体分为左右两部分,要求在左边栏点击按钮时,右边动态加载窗体最后想到用panel实现,经历几次失败,并查找资料后,终于搞定 说明:如果多次切换需加入 panel.clea ...
- WPF Win32 API 嵌入Form 窗体
WIn32 API: public class Win32Native { [DllImport("user32.dll", SetLastError = true, CharSe ...
- C#将exe运行程序嵌入到自己的winform窗体中
以下例子是将Word打开,然后将它嵌入到winform窗体中,效果如下图:C将exe运行程序嵌入到自己的winform窗体中 - kingmax_res - iSport注意:该方法只适用于com的e ...
- C#WinForm窗体内Panel容器中嵌入子窗体、程序主窗体设计例子
C#WinForm父级窗体内Panel容器中嵌入子窗体.程序主窗体设计例子 在项目开发中经常遇到父级窗体嵌入子窗体所以写了一个例子程序,顺便大概划分了下界面模块和配色,不足之处还望指点 主窗体窗体采用 ...
- exe程序嵌入Winform窗体
1.新建winform程序,添加一个Panel控件和一个button控件,winform窗体命名为:Mainform: 2.新建一个类文件,方便引用,命名为:exetowinform: 3.Mainf ...
- winform里操作打开在panel里的form窗体,子窗体操作同级子窗体或者父窗体的方法
最近开始了一个winform项目,原先一直都是web项目.遇到个问题,就是在框架内,左侧和中间的main都是用panel来实现的form,就是把form窗体打开到panel里,实现左侧是导航,中间是操 ...
- winform窗体 小程序【移动窗体和阴影】
窗体无边框设置后无法移动,引用API 使其获得功能 移动 //窗体移动API [DllImport("user32.dll")] public static extern bool ...
- C# WinForm 慎用 override CreateParams 来重载窗体的一些特性
窗体和控件的属性CreateParams(这真的是一个属性)很神奇,因为通过它你能够很方便的控制窗体或控件诸如边框.最大化最小化关闭按钮的隐藏.窗体的模式化弹窗模式等的一些特性.虽然,CreatePa ...
- C# WinForm 单例模式(例:同一个窗体只创建一次实例)
//C# WinForm 单例模式(例:同一个窗体只创建一次实例) //打开窗体的事件: Form3 f = Form3.InstanceObject() ; //实例化窗体 f.Focus(); / ...
随机推荐
- Scrapy框架: 通用爬虫之XMLFeedSpider
步骤01: 创建项目 scrapy startproject xmlfeedspider 步骤02: 使用XMLFeedSpider模版创建爬虫 scrapy genspider -t xmlfeed ...
- LINUX查看服务器硬件配置(转)
LINUX查看硬件配置 1. 查看所有硬件的型号 dmidecode | more # dmidecode 2.2 SMBIOS 2.5 present. 170 structures oc ...
- openface人脸识别框架
openface的githup文档地址:http://cmusatyalab.github.io/openface/ openface的安装: 官方推荐用docker来安装openface,这样方便快 ...
- 初学Vue
指令.组件.数据 指令 指令带有前缀,v-表示它们是Vue提供的特殊属性.如: v-bind:绑定元素属性,如:v-bind:title v-if:条件,绑定DOM 的结构 v-for:循环,使用Ar ...
- 配置阿里云SLB全站HTTPS集群
配置阿里云SLB全站HTTPS集群(以下内容仅为流程,信息可能有些对应不上) 1 登录阿里云购买两台实例 1.1 按量付费购买两台实例 1.2 配置网络可以不选择分配外网 1.3 自定义密码 1.4 ...
- MySQL日志文件与分析
1.查询日志.慢查询日志.二进制日志对比 查询日志 general_log 会记录用户的所有操作,其中包含增删查改等 可以指定输出为表 慢查询日志 slow_log 只要超过定义时间的所有操作语句都记 ...
- 二、JPA的注解
@Entity注类就表示实体类了.注意:必须要有@Entity注解,否则会报错. @Table里面的就是表名和类名进行映射. @Id标识主键列,@GeneratedValue主键生成策略配合@Id使用 ...
- Windows下JDK安装步骤 + eclipse集成配置
一.JDK环境配置 1.解压到java目录下 2.路径和上面路径一致 3.配置path路径 4.查看版本 二.Eclipse配置 1.编译版本 2.运行环境 3.默认字集 4.字体大小
- Zip函数(Python)
>>> z = zip((2,3,4),(33,44,55)) >>> z <zip object at 0x1022cdb88> >>&g ...
- 饿了么监控系统 EMonitor 与美团点评 CAT 的对比
背景介绍 饿了么监控系统EMonitor:是一款服务于饿了么所有技术部门的一站式监控系统,覆盖了系统监控.容器监控.网络监控.中间件监控.业务监控.接入层监控以及前端监控的数据存储与查询.每日处理总数 ...