C# WinForm将其它应用程序窗体嵌入自己内部

这是最近在做的一个项目中提到的需求,把一个现有的窗体应用程序界面嵌入到自己开发的窗体中来,看 起来就像自己开发的一样(实际上……跟自己开发的还是有一点点区别的,就是内嵌程序和宿主程序的窗口激 活状态问题)。

在codeproject找到了一篇相关的文章 (http://www.codeproject.com/Articles/9123/Hosting-EXE-Applications-in-a-WinForm-project),虽然 可用,但是很不方便,于是重新设计编写了一个类库,用一个控件完成内嵌其它应用程序的功能。

直 接上图先:

从打开Adobe Reader那张图片可以看出来所谓的“内嵌程序和宿主程序的窗口激活状态问题”。当内嵌程序窗口激活时,表 面上将其包裹起来的宿主窗口却处于非激活的状态。想隐藏这一点的话,把窗口的FormBorderStyle属性设为 None吧,然后自己在窗口上画关闭、最大化、最小化按钮好了。

原作者的实现思路更能暴露本质,所 以这里用原作者的代码段解释一下实现过程。

1、启动要嵌入的应用程序进程

Process p = 

null;
 try
 {
   // Start the process
   p = System.Diagnostics.Process.Start(this.exeName); 

   // Wait for process to be created and enter idle condition
   p.WaitForInputIdle(); 

   // Get the main handle
   appWin = p.MainWindowHandle;
 }
 catch (Exception ex)
 {
   MessageBox.Show(this, ex.Message, "Error");
 }

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索c#窗体应用程序
, process.start()
, 程序
, 应用程序
, 窗体
, 嵌入窗口
, 激活
, 窗口
, winform 类库 外部exe
, c# winform窗体程序
, WINFORM宿主
一个
c站、c语言、cf、ch、c罗,以便于您获取更多的相关知识。

时间: 2024-10-27 15:33:51

C# WinForm将其它应用程序窗体嵌入自己内部的相关文章

用Winform开发了一个程序,界面上的控件在Win7下是基本对齐的,到了WindowsServer2008下就变的完全对不齐了?请问这是什么原因?

问题描述 用Winform开发了一个程序,界面上的控件在Win7下是基本对齐的,到了WindowsServer2008下就变的完全对不齐了?请问这是什么原因?RT 解决方案 解决方案二:不知道你是用什么方法"对齐"的,所以无法判断.比如说你用"空格"来搞什么"对齐",那么不同系统的同一个主题下的细节设置也是有调整的,空格在高版本的windows下肯定就变宽了一些,那么自然在高版本windows下就"鼓出去"了.你用于"

winform放入wpf主窗体中?

问题描述 winform放入wpf主窗体中? wpf作为主窗体有导航作用,winform是已经写好的程序.怎么把这个winform加载到wpf这个框里? 解决方案 http://jingyan.baidu.com/article/3aed632e663387701080910d.html

C++获得其他程序窗体控件中信息的方法

  本文实例讲述了C++获得其他程序窗体控件中信息的方法.分享给大家供大家参考.具体分析如下: 这里演示了获得其他程序窗体控件信息的方法, 用FindWindow API找到文本框句柄,用SendMessage(WM_GETTEXT)获得文本 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 #include <windows.h> BOOL CALLBACK EnumChildPro

Winform子线程开启的窗体无法响应DragEnter事件?

问题描述 Winform子线程开启的窗体无法响应DragEnter事件? 本来是在Program.Main里面直接用Application.Run显示一个窗体,可以正常响应DragEnter事件,但是以如下方法显示该窗体的话,就无法正常响应DragEnter事件了,请问各位大神怎么破? 解决方案 好吧,我想到了另一个办法,不用子线程启动也可以关闭一个Form 解决方案二: 不要把界面放在额外的线程中运行,这是常识.天哪,你是从哪里学的C#. 解决方案三: ..囧,UI,都不是线程安全的

c++-NFC对话框的应用程序窗体调整的问题

问题描述 NFC对话框的应用程序窗体调整的问题 VIS C++6.0在OnSize中用MoveWindow调整CEDit的大小,适应窗口的方法是什么?还有怎么加入滚动? 解决方案 OnSize也可以,ReSize也可以 参考:http://blog.csdn.net/eqiang8271/article/details/24486411

如何在程序中嵌入FOP

FOP使用方式 FOP有3种使用方式,分别为命令行,程序嵌入,XT 嵌入,这里将主要介绍如何在程序中嵌入FOP功能.将XML文件转换为PDF实际上分为2步,第1步是利用XSLT将XML转换为XSL-FO,第2步是将XSL-FO转换为PDF.这里不想讲述XSLT和XSL-FO有关的知识(这方面的文档相当多),而只将讲述如何进行第2步的转换编程. 在程序中嵌入FOP 1. 范例simple.fo文件 上述是一个很简单的fo文件,将显示两块文字,具体的fo语法请读者自己查看相应资料. 2. 简单调用F

请问谁有winform开发的应用程序实例或教程也行

问题描述 请问谁有winform开发的应用程序实例或教程也行,最好是源码,VS2005+C#,谢谢啦 解决方案 解决方案二:http://download.csdn.net/source/267815csdn下载频道多的是啦解决方案三:这方面的中文书籍不多,你可以去看看外文的书:Manning.Publications.Windows.Forms.in.Action.2nd.Edition.Apr.2006.pdf电驴上有,这本我看过,还是不错的

mfc-MFC多文档应用程序中嵌入cef3,启动时一次性启了三个多文档应用程序

问题描述 MFC多文档应用程序中嵌入cef3,启动时一次性启了三个多文档应用程序 新建多文档应用程序,新增了Dialog,在Dialog的OnCreate中实现 了cef的CefExecuteProcess.CefInitialize.CreateBrowser,编译无误,结果运行时一下启了多文档实例,而且网页也没有显示出来. 附代码: int CTestDlg::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CDialogEx::OnCreate(

C#背景图片大在程序窗体加载时很卡怎么解决?

问题描述 C#背景图片大在程序窗体加载时很卡怎么解决? 我的C#窗体程序加载了一个背景图片,但是这个图片有几百KB,在运行时感觉很卡,为什么别人的程序加载时感觉很流畅呢?? 解决方案 背景图片读取后,先压缩再设置为背景看看呢 解决方案二: 新建一个空白程序,设置窗体的背景为你的图片,启动卡不卡?如果还卡,就是你的环境.硬件等有问题. 如果不卡,就是你的代码的问题.另外几百kb的图片要看是什么图片,如果是压缩格式的,比如jpg png,那也很可观了. 比如说一部数码相机拍摄的,2048x1536分