# AppContainer
Embed an exe application into the panel control. make it feels like you own this exe application.
http://www.cnblogs.com/bitzhuwei/archive/2012/05/24/SmileWei_EmbeddedApp.html
<p>这是最近在做的一个项目中提到的需求,把一个现有的窗体应用程序界面嵌入到自己开发的窗体中来,看起来就像自己开发的一样(实际上……跟自己开发的还是有一点点区别的,就是内嵌程序和宿主程序的窗口激活状态问题)。</p>
<p>在codeproject找到了一篇相关的文章(<a title="Hosting EXE Applications in a WinForm project" href="http://www.codeproject.com/Articles/9123/Hosting-EXE-Applications-in-a-WinForm-project" target="_blank">http://www.codeproject.com/Articles/9123/Hosting-EXE-Applications-in-a-WinForm-project</a>),虽然可用,但是很不方便,于是重新设计编写了一个类库,用一个控件完成内嵌其它应用程序的功能。</p>
<p>直接上图先:</p>
<p> <a href="http://images.cnblogs.com/cnblogs_com/bitzhuwei/201205/201205241831233469.png"><img style="display: inline; border-width: 0px;" title="嵌入QQ影音" src="http://images.cnblogs.com/cnblogs_com/bitzhuwei/201205/201205241831247863.png" alt="嵌入QQ影音" width="365" height="254" border="0" /></a> <a href="http://images.cnblogs.com/cnblogs_com/bitzhuwei/201205/201205241831258877.png"><img style="display: inline; border-width: 0px;" title="嵌入Windows Live Writer" src="http://images.cnblogs.com/cnblogs_com/bitzhuwei/201205/201205241831258287.png" alt="嵌入Windows Live Writer" width="327" height="254" border="0" /></a></p>
<p><a href="http://images.cnblogs.com/cnblogs_com/bitzhuwei/201205/20120524183127630.png"><img style="display: inline; border-width: 0px;" title="嵌入photoshop" src="http://images.cnblogs.com/cnblogs_com/bitzhuwei/201205/201205241831279169.png" alt="嵌入photoshop" width="389" height="254" border="0" /></a> <a href="http://images.cnblogs.com/cnblogs_com/bitzhuwei/201205/201205241831289103.png"><img style="display: inline; border-width: 0px;" title="嵌入Adobe Reader" src="http://images.cnblogs.com/cnblogs_com/bitzhuwei/201205/201205241831288513.png" alt="嵌入Adobe Reader" width="355" height="254" border="0" /></a></p>
<p>从打开Adobe Reader那张图片可以看出来所谓的“内嵌程序和宿主程序的窗口激活状态问题”。当内嵌程序窗口激活时,表面上将其包裹起来的宿主窗口却处于非激活的状态。想隐藏这一点的话,把窗口的FormBorderStyle属性设为None吧,然后自己在窗口上画关闭、最大化、最小化按钮好了。</p>
<p> </p>
<p>原作者的实现思路更能暴露本质,所以这里用原作者的代码段解释一下实现过程。</p>
<p>1、启动要嵌入的应用程序进程</p>
<div class="cnblogs_code">
<pre><span style="color: #008080;"> 1</span> Process p = <span style="color: #0000ff;">null</span><span style="color: #000000;">;
</span><span style="color: #008080;"> 2</span> <span style="color: #0000ff;">try</span>
<span style="color: #008080;"> 3</span> <span style="color: #000000;">{
</span><span style="color: #008080;"> 4</span> <span style="color: #008000;">//</span><span style="color: #008000;"> Start the process </span>
<span style="color: #008080;"> 5</span> p = System.Diagnostics.Process.Start(<span style="color: #0000ff;">this</span><span style="color: #000000;">.exeName);
</span><span style="color: #008080;"> 6</span>
<span style="color: #008080;"> 7</span> <span style="color: #008000;">//</span><span style="color: #008000;"> Wait for process to be created and enter idle condition </span>
<span style="color: #008080;"> 8</span> <span style="color: #000000;"> p.WaitForInputIdle();
</span><span style="color: #008080;"> 9</span>
<span style="color: #008080;">10</span> <span style="color: #008000;">//</span><span style="color: #008000;"> Get the main handle</span>
<span style="color: #008080;">11</span> appWin =<span style="color: #000000;"> p.MainWindowHandle;
</span><span style="color: #008080;">12</span> <span style="color: #000000;">}
</span><span style="color: #008080;">13</span> <span style="color: #0000ff;">catch</span><span style="color: #000000;"> (Exception ex)
</span><span style="color: #008080;">14</span> <span style="color: #000000;">{
</span><span style="color: #008080;">15</span> MessageBox.Show(<span style="color: #0000ff;">this</span>, ex.Message, <span style="color: #800000;">"</span><span style="color: #800000;">Error</span><span style="color: #800000;">"</span><span style="color: #000000;">);
</span><span style="color: #008080;">16</span> }</pre>
</div>
<p>2、调用Windows API将启动的应用程序窗口嵌入自定义的控件(作者用的是Panel控件)</p>
<div class="cnblogs_code">
<pre><span style="color: #008080;">1</span> <span style="color: #008000;">//</span><span style="color: #008000;"> Put it into this form</span>
<span style="color: #008080;">2</span> SetParent(appWin, <span style="color: #0000ff;">this</span><span style="color: #000000;">.Handle);//<span style="color: #008000;">this在这里是Panel控件<br /><br /></span>
</span><span style="color: #008080;">3</span>
<span style="color: #008080;">4</span> <span style="color: #008000;">//</span><span style="color: #008000;"> Remove border and whatnot</span>
<span style="color: #008080;">5</span> <span style="color: #000000;">SetWindowLong(appWin, GWL_STYLE, WS_VISIBLE);
</span><span style="color: #008080;">6</span>
<span style="color: #008080;">7</span> <span style="color: #008000;">//</span><span style="color: #008000;"> Move the window to overlay it on this window</span>
<span style="color: #008080;">8</span> MoveWindow(appWin, <span style="color: #800080;">0</span>, <span style="color: #800080;">0</span>, <span style="color: #0000ff;">this</span>.Width, <span style="color: #0000ff;">this</span>.Height, <span style="color: #0000ff;">true</span>);</pre>
</div>
<p>3、设置被嵌入的窗体大小随宿主窗体改变</p>
<div class="cnblogs_code">
<pre><span style="color: #008080;">1</span> <span style="color: #0000ff;">protected</span> <span style="color: #0000ff;">override</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> OnResize(EventArgs e)
</span><span style="color: #008080;">2</span> <span style="color: #000000;">{
</span><span style="color: #008080;">3</span> <span style="color: #0000ff;">if</span> (<span style="color: #0000ff;">this</span>.appWin !=<span style="color: #000000;"> IntPtr.Zero)
</span><span style="color: #008080;">4</span> <span style="color: #000000;"> {
</span><span style="color: #008080;">5</span> MoveWindow(appWin, <span style="color: #800080;">0</span>, <span style="color: #800080;">0</span>, <span style="color: #0000ff;">this</span>.Width, <span style="color: #0000ff;">this</span>.Height, <span style="color: #0000ff;">true</span><span style="color: #000000;">);
</span><span style="color: #008080;">6</span> <span style="color: #000000;"> }
</span><span style="color: #008080;">7</span> <span style="color: #0000ff;">base</span><span style="color: #000000;">.OnResize (e);
</span><span style="color: #008080;">8</span> }</pre>
</div>
<p>4、设置被嵌入的窗体应用程序在宿主程序关闭时也关闭</p>
<div class="cnblogs_code">
<pre><span style="color: #008080;"> 1</span> <span style="color: #0000ff;">protected</span> <span style="color: #0000ff;">override</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> OnHandleDestroyed(EventArgs e)
</span><span style="color: #008080;"> 2</span> <span style="color: #000000;">{
</span><span style="color: #008080;"> 3</span> <span style="color: #008000;">//</span><span style="color: #008000;"> Stop the application</span>
<span style="color: #008080;"> 4</span> <span style="color: #0000ff;">if</span> (appWin !=<span style="color: #000000;"> IntPtr.Zero)
</span><span style
没有合适的资源?快使用搜索试试~ 我知道了~
C# winform页面多进程打开exe
共101个文件
cs:26个
exe:19个
cache:11个
5星 · 超过95%的资源 需积分: 49 173 下载量 136 浏览量
2015-07-21
16:02:29
上传
评论
收藏 349KB RAR 举报
温馨提示
资源可以在一个winform页面同时加载多个exe到页面,并且可以传参数。
资源详情
资源评论
资源推荐
收起资源包目录
C# winform页面多进程打开exe (101个子文件)
AppContainer.bmp 310B
AppContainer.bmp 310B
AppContainer.bmp 310B
SmileWei.EmbeddedApp.WinForm.csprojResolveAssemblyReference.cache 13KB
DesignTimeResolveAssemblyReferences.cache 9KB
DesignTimeResolveAssemblyReferencesInput.cache 8KB
DesignTimeResolveAssemblyReferencesInput.cache 7KB
DesignTimeResolveAssemblyReferencesInput.cache 6KB
DemoApp.csprojResolveAssemblyReference.cache 2KB
SmileWei.EmbeddedApp.csprojResolveAssemblyReference.cache 2KB
DesignTimeResolveAssemblyReferences.cache 1KB
DesignTimeResolveAssemblyReferences.cache 1KB
SmileWei.EmbeddedApp.WinForm.csproj.GenerateResource.Cache 1KB
DemoApp.csproj.GenerateResource.Cache 1KB
FullSearch.config 188B
DemoApp.exe.config 182B
App.config 182B
FormEmbededDemo.Designer.cs 22KB
AppContainer.cs 9KB
FormMain.Designer.cs 7KB
Win32API.cs 6KB
Form1.Designer.cs 4KB
FormHandle.Designer.cs 4KB
FormMain.cs 4KB
Resources.Designer.cs 3KB
Resources.Designer.cs 3KB
Form1.Designer.cs 2KB
Form1.cs 1KB
AssemblyInfo.cs 1KB
AssemblyInfo.cs 1KB
AppFilenameEditor.cs 1KB
AssemblyInfo.cs 1KB
Settings.Designer.cs 1KB
Settings.Designer.cs 1KB
AppContainer.Designer.cs 1KB
FormEmbededDemo.cs 747B
FormHandle.cs 615B
Program.cs 611B
Form1.cs 579B
Program.cs 509B
TemporaryGeneratedFile_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs 0B
TemporaryGeneratedFile_5937a670-0e60-4077-877b-f7221da3dda1.cs 0B
TemporaryGeneratedFile_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs 0B
SmileWei.EmbeddedApp.WinForm.csproj 6KB
DemoApp.csproj 4KB
SmileWei.EmbeddedApp.csproj 3KB
SmileWei.EmbeddedApp.dll 13KB
SmileWei.EmbeddedApp.dll 13KB
SmileWei.EmbeddedApp.dll 13KB
SmileWei.EmbeddedApp.WinForm.exe 45KB
SmileWei.EmbeddedApp.WinForm.exe 45KB
DemoApp.exe 23KB
DemoApp.exe 23KB
SmileWei.EmbeddedApp.WinForm.vshost.exe 22KB
DemoApp-FixedToolWindow.exe 22KB
DemoApp-Sizable.exe 22KB
DemoApp-FixedSingle.exe 22KB
DemoApp-SizableToolWindow.exe 22KB
DemoApp-Fixed3D.exe 22KB
DemoApp-None.exe 22KB
DemoApp-FixedDialog.exe 22KB
DemoApp-FixedToolWindow.exe 22KB
DemoApp-Sizable.exe 22KB
DemoApp-FixedSingle.exe 22KB
DemoApp-SizableToolWindow.exe 22KB
DemoApp-Fixed3D.exe 22KB
DemoApp-None.exe 22KB
DemoApp-FixedDialog.exe 22KB
.gitattributes 2KB
.gitignore 2KB
appIcon.ico 9KB
SmileWei.EmbeddedApp.WinForm.vshost.exe.manifest 490B
README.md 15KB
SmileWei.EmbeddedApp.WinForm.pdb 38KB
SmileWei.EmbeddedApp.WinForm.pdb 38KB
DemoApp.pdb 30KB
DemoApp.pdb 30KB
SmileWei.EmbeddedApp.pdb 28KB
SmileWei.EmbeddedApp.pdb 28KB
SmileWei.EmbeddedApp.pdb 28KB
SmileWei.EmbeddedApp.WinForm.FormHandle.resources 10KB
SmileWei.EmbeddedApp.WinForm.FormMain.resources 10KB
DemoApp.FormEmbededDemo.resources 7KB
DemoApp.Form1.resources 180B
DemoApp.Properties.Resources.resources 180B
SmileWei.EmbeddedApp.WinForm.Properties.Resources.resources 180B
SmileWei.EmbeddedApp.WinForm.Form1.resources 180B
FormMain.resx 21KB
FormHandle.resx 20KB
FormEmbededDemo.resx 15KB
Form1.resx 6KB
Form1.resx 6KB
Resources.resx 5KB
Resources.resx 5KB
Settings.settings 242B
Settings.settings 242B
SmileWei.EmbeddedApp.sln 4KB
SmileWei.EmbeddedApp.v11.suo 92KB
SmileWei.EmbeddedApp.WinForm.csproj.FileListAbsolute.txt 2KB
DemoApp.csproj.FileListAbsolute.txt 867B
共 101 条
- 1
- 2
wolf_haung
- 粉丝: 10
- 资源: 45
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论6