在winform嵌入外部应用程序
应朋友要求,需要将一个第三方应用程序嵌入到本程序WinForm窗口,以前在VB6时代做过类似的功能,其原理就是利用Windows API中FindWindow函数找到第三方应用程序句柄,再利用SetParent函数,将该句柄设置为本窗口的子窗口。
网上搜索大部分都是利用System.Diagnostics.Process获取外部应用程序的MainWindowHandle,貌似以前的COM应用程序可以,在Win10下调用Process.MainWindowHandle会提示“应用程序已退出”,也就是获取不到应用程序句柄。于是转换思路,利用FindWindow查找窗口句柄,测试成功。
但是需要注意的是,有些第三方应用程序对访问权限要求高,需要“以管理员身份运行"/bin/debug"下的exe文件才能成功嵌入,代码调试无效,调试模式调用SetParent会返回-5错误。
以下是部分代码:
/// <summary>///将指定的程序嵌入指定的控件/// </summary>private voidEmbedProcess(){string title = System.Configuration.ConfigurationManager.AppSettings["Title"];//要查找的外部应用程序窗口标题 IntPtr P= new IntPtr(0);while (true){P= FindWindow(null, title);//通过标题查找窗口句柄,当然也可以按class查找,如果需要查找子窗口需要FindWindowEx函数Thread.Sleep(100);if (P ==IntPtr.Zero)continue;elsebreak;}try{//将外部应用程序嵌入到本窗口long ret = SetParent(P, this.panel1.Handle);if (ret == 0){MessageBox.Show("ErrorCode:"+GetLastError().ToString());}//移除边框样式SetWindowLong(new HandleRef(this, P), GWL_STYLE, WS_VISIBLE);//移动窗口MoveWindow(P, 0, 0, this.Width, this.Height, true);}catch(Exception ex1){Console.WriteLine(ex1.Message);}}
点击这里下载源码
主要参考来源:
http://blog.csdn.net/llddyy123wq/article/details/5624625
转载于:https://www.cnblogs.com/habin/p/7815369.html
在winform嵌入外部应用程序相关推荐
- Qt嵌入外部EXE程序,并显示在主界面中!
一.获取程序句柄以及类 打开Visual Studio 进行查询 二.QT调用程序 H文件 #ifndef VISUAL_H #define VISUAL_H#include <QWidget& ...
- Linux下 Qt界面程序嵌入另一个Qt界面程序_Qt应用嵌入外部进程窗口
项目工程的实现,想要使用多个程序进行实现,在里面存在一定的调用的过程:调查的情况如下 Qt界面程序嵌入另一个Qt界面程序[Linux] Qt界面程序嵌入另一个Qt界面程序[Linux]_ptc321的 ...
- 【转】C#自定义控件:WinForm将其它应用程序窗体嵌入自己内部
PS:文末的附件已更新,这次我放到博客园里面了,不会弹出广告,放心下载,O(∩_∩)O谢谢! 这是最近在做的一个项目中提到的需求,把一个现有的窗体应用程序界面嵌入到自己开发的窗体中来,看起来就像自己开 ...
- C#自定义控件:WinForm将其它应用程序窗体嵌入自己内部
这是最近在做的一个项目中提到的需求,把一个现有的窗体应用程序界面嵌入到自己开发的窗体中来,看起来就像自己开发的一样(实际上--跟自己开发的还是有一点点区别的,就是内嵌程序和宿主程序的窗口激活状态问题) ...
- Winform嵌入Web网页-CefSharp组件
Winform嵌入Web网页-CefSharp组件 WebBrower组件是基于本地操作系统的IE浏览器的,CSS解析和兼容性不太友好,一般我们不推荐使用.这里我们采用的是CefSharp这个开源组件 ...
- Qt Creator在外部应用程序上运行Valgrind工具
Qt Creator在外部应用程序上运行Valgrind工具 在外部应用程序上运行Valgrind工具 在外部应用程序上运行Valgrind工具 Qt Creator集成了Valgrind代码分析工具 ...
- C# WinForm中获取当前程序运行目录的方法
C# WinForm中获取当前程序运行目录的方法: "AppDomain.CurrentDomain.BaseDirectory":获取当前应用程序所在目录的路径,最后包含&quo ...
- Flex之嵌入外部资源
1.MXML中嵌入外部资源: <?xml version="1.0" encoding="utf-8"?> <!-- embed\Button ...
- [码海拾贝 之TC] 呼叫外部应用程序或脚本
前言 在Teamcenter Enterprise 的服务端开发中, 如何调用到外部的程序或是脚本. 一般, 呼叫外部的程序或脚本 在Java 中, 可以用这样的方式 Process child = ...
最新文章
- android实现底部弹出菜单,Android实现底部缓慢弹出菜单
- Discuz学习总结——部分bug解决方案
- 解决RuntimeError: cuda runtime error (30) : unknown error at /pytorch/aten/src/THC/THCGeneral.cpp:70N
- VTK:PolyData之ThinPlateSplineTransform
- 第 36 章 RRDTool
- mysql修改密码1820_mysql5.7初始化密码报错ERROR1820(HY000):YoumustresetyourpasswordusingALTERUSERstateme...
- 机器学习实战9-运行Tensorflow(california_housing数据集)
- 想为自己设置的软件加一个属于自己的图标吗?使用AWT_Swing_图标解决你的问题(源码解析)
- SQL Server 2012:SQL Server体系结构
- PSP3000高破解率傻瓜包!
- 前端Photoshop插件cutterman的下载和安装以及使用
- python绘图颜色代码_Python绘图的颜色设置
- VS2019+CUDA编程(流程)
- C语言练习题,从键盘输入一个字符,在给定的字符串中寻找该输入字符,若找到将该字符从字符串中删掉,并输出该字符串,没有找到给出提示信息“未找到”。
- Pull Request 到底是什么意思
- vivo 应用商店推荐系统探索与实践
- 分享一个VS写的PDF打印控件
- win10 系统锁屏壁纸的目录
- MichiGAN:Multi-Input-Conditioned Hair Image Generation for Portrait Editing---论文阅读笔记
- 超级!超级!超级好用的视频标注工具
热门文章
- python读取 application_python PyQt5.QtWidgets.QApplication类(sys.argv)(app应用对象类)...
- vim匹配特定的行并删除
- cclink 和发那科机器人_发那科 iB系列 | 机器人地装行走轴三大升级介绍
- python大一知识点串讲_python-前20天的着重知识点
- 关于c语言的字符常量
- olap与mysql_MySQL与OLAP:分析型SQL查询最佳实践探索
- 【存储知识学习】第三章磁盘原理与技术3.6磁盘控制器、驱动器控制电路和磁盘控制器驱动程序and3.7内部传输速率和外部传输速率--《大话存储》阅读笔记
- python开源聊天机器人ChatterBot——聊天机器人搭建、流程分析、源码分析
- (7)操作系统安全机制一
- shields 徽标_所有徽标看起来都一样