WPF用户控件库 嵌入外部(VLC)exe
综合网上资源完成的自己的第一篇博客
------------------------------------------------------------------------
网上类似的贴子挺多的,由于情况不太一样。网上相关帖子都是在 MainWindow 嵌入。我需要在原有客户端上开发新的插件即用户控件库实现嵌入外部exe。
主要问题:获取不到窗口句柄。
1、利用系统API实现嵌入。
[DllImport("user32.dll", SetLastError = true)]
public static extern long SetParent(IntPtr hWndChild, IntPtr hWndNewParent);
[DllImport("user32.dll")]
public static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow);
2、当时在获取页面(用户控件库)的句柄问题上碰壁,主要思路是在页面上加Border、Grid等类似的容器控件。然后可通过程序集“PresentationCore”里的方法获取。
但需要注意的是,不能在页面加载过程中获取句柄。可在button的click事件触发、容器控件的load事件触发、、、
using System;
using System.Diagnostics;
using System.Windows;
using System.Windows.Interop;
using System.Reflection;
using System.IO; namespace AlarmCenter.Addin.RunVLC
{
/// <summary>
/// HomePage.xaml 的交互逻辑
/// </summary>
public partial class HomePage
{
string RootPath;
//定义变量
private IntPtr prsmwh;//外部exe文件运行句柄
private Process process;//外部exe文件对象
public HomePage()
{
InitializeComponent();
RootPath = AlarmCenter.Core.General.GetApplicationRootPath();//获取相对可执行文件路径
} public void RunVLC()
{
//获取当前窗口句柄
IntPtr handle = ((HwndSource)PresentationSource.FromVisual(bd_test)).Handle; string path = null;
var currentAssembly = Assembly.GetEntryAssembly();
var currentDirectory = new FileInfo(currentAssembly.Location).DirectoryName;
if (currentDirectory == null) return;
//初始化配置,指定可执行文件路径
if (AssemblyName.GetAssemblyName(currentAssembly.Location).ProcessorArchitecture == ProcessorArchitecture.X86)
path = RootPath + @"\bin\VLCPlayerSDK\libvlc_x86\vlc.exe";
else
path = RootPath + @"\bin\VLCPlayerSDK\libvlc_x64\vlc.exe"; process = Process.Start(path, RootPath + "\\bin\\宣传片\\test.mkv -f --no-video-title-show --repeat --no-interact --video-on-top --mouse-hide-timeout=1");
prsmwh = process.MainWindowHandle;
while (prsmwh == IntPtr.Zero)
{
prsmwh = process.MainWindowHandle;
}
//设置父窗口
SDK.SetParent(prsmwh, handle);
SDK.ShowWindowAsync(prsmwh, );//子窗口最大化
} public override void Dispose()
{
process?.Kill();
base.Dispose();
} private void Bd_test_Loaded(object sender, RoutedEventArgs e)
{
RunVLC();
}
}
}
WPF用户控件库 嵌入外部(VLC)exe的更多相关文章
- [WPF 学习] 3.用户控件库使用资源字典的困惑
项目需要(或者前后端分离的需要),前端我使用了用户控件库,由后端用代码加载和控制. 然而用户控件库没法指定资源字典,于是在用户控件的xaml文件里面手工添加了资源字典 <UserControl. ...
- 创建WPF用户控件
wpf用户自定义控件和winform创建方法类似,这里先纠正一个误区,就是有很多人也是添加,然后新建,然后是新建用户控件库,但是为什么编译好生成后Debug目录下还是只有exe文件而没有dll文件呢? ...
- WPF 免费控件库
https://github.com/Infragistics/InfragisticsThemesForMicrosoftControls 几款WPF免费控件库,不过运行源码时需要下载三个DLL , ...
- C# WPF开源控件库:MahApps.Metro
其实站长很久之前就知道这个开源WPF控件库了,只是一直欣赏不了这种风格,但也star了该项目.每次浏览该仓库时,发现star越来越多,也看到很多网友对它的褒奖,所以今天就向大家推荐这款WPF控件库. ...
- WPF 用户控件嵌入网页
WPF使用用户控件嵌入网页,直接使用WebBrowser或Frame会产生报错,报错信息如下: 1.使用WebBrowser,<WebBrowser Source="http://19 ...
- 使用CefSharp 在C#用户控件中嵌入Chrome浏览器使用方法
CEF(Chromium Embedded Framework, 嵌入式Chromium框架)是C/C++开发的库 目前 Google Chrome(Google浏览器),Chromium浏览器,Op ...
- 【demo练习四】:WPF用户控件案例
首先,新建vs中“用户控件(WPF)”,右键项目名 =>"添加"按钮 => 选择“新建项”. 然后选择“用户控件(WPF)” => 起名字 => 点击“添加 ...
- WPF 用户控件的自定义依赖属性在 MVVM 模式下的使用备忘
依赖属性相当于扩充了 WPF 标签的原有属性列表,并可以使用 WPF 的绑定功能,可谓是十分方便的:用户控件则相当于代码重用的一种方式:以上几点分开来还是比较好理解的,不过要用到MVVM 模式中,还是 ...
- WPF 免费控件库(2)
最近在逛园子的时候发现的园友分享或提及的WPF控件库~ (1) Bootstrap WPF Style,Bootstrap风格的WPF样式 转:http://www.cnblogs.com/tsliw ...
随机推荐
- system v 共享内存
#include <stdio.h> #include <string.h> #include <errno.h> #include <unistd.h> ...
- Android NDK定位.so文件crash代码位置
参考:http://blog.csdn.net/xyang81/article/details/42319789 问题: QRD8926_110202平台的Browser必现报错.(去年的项 ...
- collection tree protocol
本文所属图书 > 传感网原理与技术 本书根据<高等院校物联网工程专业发展战略研究报告暨专业规范(试行)>和物联网工程本科专业的教学需要,结合传感网的最新发展及其应用现状编写而成.主要 ...
- @Transactional注解使用心得
配置基于注解的声明式事务: ...配置tx,aop的命名空间 xmlns:tx="http://www.springframework.org/schema/tx" xmlns:a ...
- [C#]RichTextBox实现拖放
amespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeC ...
- C语言基础第五次作业
题目7-2 统计一行文本的单词个数 1.实验代码 #include <stdio.h> int main() { char a; ,countword=; ){ scanf("% ...
- Java:斐波那契数列
斐波那契数列指的是这样一个数列 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10 ...
- shell 报错 /bin/bash^M: bad interpreter: No such file or directory
shell 执行报错: ./test.sh: /bin/bash^M: bad interpreter: No such file or directory 原因:window和linux 的文件格式 ...
- 2018.10.30 NOIP模拟 字胡串(单调栈+容斥)
传送门 对于每个点,用单调栈求出它左右第一个比他大的位置. 然后对每个点O(logai)O(log_{a_i})O(logai)求出第一个拥有跟它不同二进制位的位置. 然后容斥一下就行了. 代码
- BUG YII2.0 $ is not defined
来源:https://www.cnblogs.com/attitudeY/p/6279985.html BUG描述:$ is not defined 没有加载jquery成功 原因:Yii2.0将JS ...