嵌入类

  1. public class ExeImpaction
  2. {
  3. public void FrmClosing()
  4. {
  5. try
  6. {
  7. if (!process.HasExited)
  8. process.Kill();
  9. }
  10. catch
  11. {
  12. }
  13. }
  14.  
  15. public void FrmResize(Form frm)
  16. {
  17. if (this.appWin != IntPtr.Zero)
  18. MoveWindow(appWin, , , frm.Width, frm.Height, true);
  19. }
  20.  
  21. Process process = null;
  22. IntPtr appWin;
  23.  
  24. [DllImport("user32.dll", SetLastError = true)]
  25. private static extern long SetParent(IntPtr hWndChild, IntPtr hWndNewParent);
  26. [DllImport("user32.dll", SetLastError = true)]
  27. private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
  28. [DllImport("user32.dll", SetLastError = true)]
  29. private static extern long SetWindowPos(IntPtr hwnd, long hWndInsertAfter, long x, long y, long cx, long cy, long wFlags);
  30. [DllImport("user32.dll", SetLastError = true)]
  31. private static extern bool MoveWindow(IntPtr hwnd, int x, int y, int cx, int cy, bool repaint);
  32.  
  33. /// <summary>
  34. /// 打开一个exe程序 并嵌入到窗体
  35. /// </summary>
  36. /// <param name="parentFrm">父类窗体</param>
  37. /// <param name="exePath">程序路径</param>
  38. /// <param name="frmCaption">窗体名称</param>
  39. /// <param name="args">参数们</param>
  40. /// <param name="waitSecond">等待时间(单点登录时如果窗体还没创建得到句柄是0无法显示窗体要等到他生成再显示)</param>
  41. /// <returns></returns>
  42. public string ExecExe(Form parentFrm, string exePath, string frmCaption, string args = "", int waitSecond = )
  43. {
  44. string errStr = "";
  45. try
  46.  
  47. {
  48. ProcessStartInfo info = null;
  49.  
  50. if ((args ?? "").ToString() != "")
  51. info = new ProcessStartInfo(exePath, args);
  52. else
  53. info = new ProcessStartInfo(exePath);
  54.  
  55. info.UseShellExecute = true;
  56. info.WindowStyle = ProcessWindowStyle.Minimized;
  57.  
  58. process = System.Diagnostics.Process.Start(info);
  59.  
  60. Thread.Sleep(waitSecond * );
  61.  
  62. process.WaitForInputIdle();
  63.  
  64. appWin = FindWindow(null, frmCaption);
  65.  
  66. appWin = FindWindow(null, frmCaption);
  67.  
  68. }
  69. catch (Exception ex)
  70. {
  71. errStr = ex.Message;
  72. }
  73.  
  74. SetParent(appWin, parentFrm.Handle);
  75. MoveWindow(appWin, , , parentFrm.Width, parentFrm.Height, true);
  76.  
  77. return errStr;
  78. }
  79.  
  80. }

用法

  1. public partial class NewTest : Form
  2. {
  3. public ExeImpaction exeIm { get; set; }
  4. public NewTest()
  5. {
  6. InitializeComponent();
  7.  
  8. string path = System.Environment.CurrentDirectory+ @"\人事管理\ProRSGL.exe";
  9. textBox1.Text = path;
  10. textBox2.Text = "人事管理系统";
  11.  
  12. exeIm = new ExeImpaction();
  13. this.Resize += NewTest_Resize;
  14. this.FormClosing += NewTest_FormClosing;
  15. }
  16.  
  17. private void NewTest_FormClosing(object sender, FormClosingEventArgs e)
  18. {
  19. exeIm.FrmClosing();
  20. }
  21.  
  22. private void NewTest_Resize(object sender, EventArgs e)
  23. {
  24. exeIm.FrmResize(this);
  25. }
  26.  
  27. private void button1_Click(object sender, EventArgs e)
  28. {
  29. exeIm.ExecExe(this, @textBox1.Text, @textBox2.Text, "000,891560,1808290021,123124121243123123", );//vb程序单点登录这里的参数自己定义的
  30. //其他程序
  31. //exeIm.ExecExe(this, @textBox1.Text, @textBox2.Text, @textBox3.Text, 1);
  32. }
  33.  
  34. private void newFormToolStripMenuItem_Click(object sender, EventArgs e)
  35. {
  36. Form frm = new Form();
  37. frm.MdiParent = this;
  38. frm.Show();
  39. }
  40.  
  41. private void 测试ToolStripMenuItem_Click(object sender, EventArgs e)
  42. {
  43.  
  44. // Process process = System.Diagnostics.Process.Start(@textBox1.Text);
  45. Process process = System.Diagnostics.Process.Start(@"D:\我的项目\application1.exe", "000,891560,1808290021,123124121243123123");
  46.  
  47. }
  48.  
  49. private void button2_Click(object sender, EventArgs e)
  50. {
  51. OpenFileDialog ofd = new OpenFileDialog();
  52. if (ofd.ShowDialog() == DialogResult.OK)
  53. textBox1.Text = ofd.FileName;
  54. }
  55. }

C# winform 将其他程序嵌入Form窗体的更多相关文章

  1. WinForm中如何实现在容器控件中嵌入form窗体(panel与子窗体)

    今天在做项目时候遇到一个问题,窗体分为左右两部分,要求在左边栏点击按钮时,右边动态加载窗体最后想到用panel实现,经历几次失败,并查找资料后,终于搞定 说明:如果多次切换需加入 panel.clea ...

  2. WPF Win32 API 嵌入Form 窗体

    WIn32 API: public class Win32Native { [DllImport("user32.dll", SetLastError = true, CharSe ...

  3. C#将exe运行程序嵌入到自己的winform窗体中

    以下例子是将Word打开,然后将它嵌入到winform窗体中,效果如下图:C将exe运行程序嵌入到自己的winform窗体中 - kingmax_res - iSport注意:该方法只适用于com的e ...

  4. C#WinForm窗体内Panel容器中嵌入子窗体、程序主窗体设计例子

    C#WinForm父级窗体内Panel容器中嵌入子窗体.程序主窗体设计例子 在项目开发中经常遇到父级窗体嵌入子窗体所以写了一个例子程序,顺便大概划分了下界面模块和配色,不足之处还望指点 主窗体窗体采用 ...

  5. exe程序嵌入Winform窗体

    1.新建winform程序,添加一个Panel控件和一个button控件,winform窗体命名为:Mainform: 2.新建一个类文件,方便引用,命名为:exetowinform: 3.Mainf ...

  6. winform里操作打开在panel里的form窗体,子窗体操作同级子窗体或者父窗体的方法

    最近开始了一个winform项目,原先一直都是web项目.遇到个问题,就是在框架内,左侧和中间的main都是用panel来实现的form,就是把form窗体打开到panel里,实现左侧是导航,中间是操 ...

  7. winform窗体 小程序【移动窗体和阴影】

    窗体无边框设置后无法移动,引用API 使其获得功能 移动 //窗体移动API [DllImport("user32.dll")] public static extern bool ...

  8. C# WinForm 慎用 override CreateParams 来重载窗体的一些特性

    窗体和控件的属性CreateParams(这真的是一个属性)很神奇,因为通过它你能够很方便的控制窗体或控件诸如边框.最大化最小化关闭按钮的隐藏.窗体的模式化弹窗模式等的一些特性.虽然,CreatePa ...

  9. C# WinForm 单例模式(例:同一个窗体只创建一次实例)

    //C# WinForm 单例模式(例:同一个窗体只创建一次实例) //打开窗体的事件: Form3 f = Form3.InstanceObject() ; //实例化窗体 f.Focus(); / ...

随机推荐

  1. 系统安装2---BIOS设置

    对于新的电脑通过U盘安装Windows系统,我们第一步绝对是修改BIOS设置.在这里面我们要修改几项比较重要的选项.如下介绍: 修改第一启动项:目的就是让电脑的第一启动项变为U盘启动. 调节引导方式: ...

  2. 搜狗拼音、QQ拼音输入法、2345拼音输入法、百度输入法 、手心输入法对比。(个人体会)

    搜狗拼音.QQ拼音输入法.2345拼音输入法.百度输入法 .手心输入法对比. 这几个输入法对比的感觉,做个记录.自己记录一下,如果恰巧有朋友也遇到类似的情况,仅供参考. 词库量 搜狗 > 百度 ...

  3. 什么是Kotlin?Java的替代语言?

    什么是Kotlin Kotlin是一个基于JVM的新的编程语言,2010年由IntelliJ IDEA所在的JetBrains公司开发,自2012年以来一直开源. Kotlin可以编译成Java字节码 ...

  4. 使用jquery.validate组件进行前端数据验证并实现异步提交前验证检查

    学习如鹏网掌上组的项目开发,使用到了前端验证,视频里使用的ValidateForm验证框架,但是我使用的Hui的框架中使用的是jquery.validate验证框架 所以自行学习jquery.vali ...

  5. springmvc 异常统一处理的三种方式详解

    1 描述  在J2EE项目的开发中,不管是对底层的数据库操作过程,还是业务层的处理过程,还是控制层的处理过程,都不可避免会遇到各种可预知的.不可预知的异常需要处理.每个过程都单独处理异常,系统的代码耦 ...

  6. 利用Navicat Premium连接Oracle数据库

    利用Navicat Premium连接Oracle数据库 Navicat premium是一款数据库管理工具,支持多种数据库,也非常轻量: 安装包准备:Navicat Premium_11.1.8简体 ...

  7. linux 命令 - ls(列出目录内容)

    ls - 列出目录内容 语法: ls (选项) (参数) 选项: -a:显示所有档案及目录(ls内定将档案名或目录名称为“.”的视为影藏,不会列出): -A:显示除影藏文件“.”和“..”以外的所有文 ...

  8. H2数据库做单测数据库时踩到的坑

    H2数据库用来做单测数据库,可以自定义初始化数据,不用担心数据库内容更改造成单测跑不过问题,不过H2数据库跟实际使用的Mysql还是有一定区别. 1. H2数据库不支持Mysql的批量更新功能,支持批 ...

  9. 什么是SolrCloud

    1.1 什么是SolrCloud SolrCloud(solr 云)是Solr提供的分布式搜索方案,当你需要大规模,容错,分布式索引和检索能力时使用 SolrCloud.当一个系统的索引数据量少的时候 ...

  10. centos 升级python

    1.下载python3.6.1的包 wget https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tgz 2.解压 tar -zxvf Pytho ...