aardio嵌入外部窗口(以scrcpy手机投屏窗口为例)

scrcpy是一个安卓手机投屏到电脑的开源组件。手机在开发者选项中打开USB调试开关,使用数据线连接到电脑,运行scrcpy.exe,就可以在电脑上查看手机屏幕,可以使用鼠标、键盘进行操作,并且提供了一系列命令行和快捷键,方便二次开发。我下载的是scrcpy-win32-v1.25,你也可以到github下载其他版本。

嵌入外部窗口并不是一个值得推荐的开发方式,但这个方法还是要掌握,有时候可以作为应急之选。下面是个小练习。

import win.ui;
/*DSG{{*/
var winform = win.form(text="未连接";right=759;bottom=469;bgcolor=12639424)
winform.add(
btnConnect={cls="button";text="连接手机";left=473;top=59;right=614;bottom=101;dr=1;dt=1;z=1};
btnDisconnect={cls="button";text="断开连接";left=472;top=127;right=613;bottom=169;dr=1;dt=1;z=2}
)
/*}}*/

import process.popen
import winex
import winex.key

winform.btnConnect.oncommand = function(id,event){
	if pp return ; 
	pp=process.popen("\scrcpy\scrcpy.exe")
	device=pp.expect("Device\:(.+?)\r",5000)
	if (!device ){
		pp.terminate()
		pp=null
		hwnd=null
		return win.msgbox("连接失败"); 
	}
	winform.text=device
	hwnd=winex.wait(,,"@SDL_app",,,pp.process.id)
	win.modifyStyle(hwnd,0x800000/*_WS_BORDER*/|0x40000/*_WS_THICKFRAME*/)
	winex.attach(hwnd,true) 
	winex.key.combine(hwnd,"ALT","W")
	winex.attach(hwnd,false)
	_,_,w0,h0=win.getPos(hwnd)
	win.setParent(hwnd,winform.hwnd)
	adjust(hwnd) 
	win.show(hwnd)
}

winform.btnDisconnect.oncommand = function(id,event){
	if pp pp.terminate();
	pp=null
	hwnd=null
	winform.text="未连接"
}

winform.onClose = function(hwnd,message,wParam,lParam){
    if pp pp.terminate()
}

winform.adjust = function( cx,cy,wParam ) {	 
	adjust(hwnd)  
};

adjust=function(hwnd){
	if !hwnd return ; 
	var rc=winform.getClientRect()	
	var height=rc.height()
	var h1=height-20
	var w1=h1*w0/h0
	win.setPos(hwnd,rc.left+50,rc.top+10,w1,h1)
}

winform.show();
win.loopMessage();
return winform;

 这里用的是设置父窗口的办法,有时候也可以用悬浮窗口。窗口样式需要改一下,位置和大小需要调一调,感觉不算复杂。

scrcpy有个默认控制台,为了屏蔽它,使用了管道。有时候,嵌套的程序在打开瞬间来不及调整,也可以用管道调用,调整好了再显示。

第一次使用嵌入窗口,可能理解得不透彻,欢迎指正。

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 在WPF中,可以通过使用外部窗口窗口句柄来实现窗口嵌入。可以使用WindowsFormsHost控件来实现此目的。 首先,需要将WindowsFormsIntegration命名空间添加到WPF项目中。然后,在XAML文件中创建一个WindowsFormsHost控件,用于承载外部窗口。 接下来,在代码后台,通过创建一个WindowsFormsHost的实,可以使用Control属性将外部窗口嵌入到这个控件中。如下所示: ```csharp WindowsFormsHost windowsFormsHost = new WindowsFormsHost(); windowsFormsHost.Child = externalWindow; ``` 在上面的代码中,externalWindow是一个WinForms窗口的实。此窗口将会嵌入到WindowsFormsHost控件中。 最后,将windowsFormsHost控件添加到WPF窗口中的UI元素中,即可在WPF应用程序中嵌入外部窗口如: ```xaml <Grid> <WindowsFormsHost Name="windowsFormsHost"/> </Grid> ``` 这样,外部窗口将会在WPF应用程序中显示出来。需要注意的是,由于WPF和WinForms使用不同的UI线程,因此在进行窗口嵌入时,可能需要进行线程间的调度和同步操作。 总之,通过使用WindowsFormsHost控件,我们可以在WPF应用程序中嵌入外部窗口,实现不同技术栈之间的互操作。 ### 回答2: 外部窗口嵌入WPF是指将其他应用程序的窗口嵌入到WPF应用程序中。通过这种方式,可以在WPF应用程序中显示其他应用程序的整个窗口,以便与该应用程序进行交互。 实现外部窗口嵌入的方法有多种,其中一种常用的方法是使用WindowsFormsHost控件。WindowsFormsHost是一个WPF控件,它可以承载Windows Forms控件。通过将WindowsFormsHost控件放置在WPF应用程序的布局中,然后将要嵌入外部窗口以Windows Forms控件的形式添加到WindowsFormsHost控件中,就可以实现外部窗口嵌入。 首先,我们需要在WPF应用程序的XAML文件中添加一个WindowsFormsHost控件。然后,通过代码的方式创建一个外部窗口的实,并将该窗口作为Windows Forms控件添加到WindowsFormsHost控件中。最后,将WindowsFormsHost控件添加到WPF应用程序的布局中,以显示外部窗口。 当外部窗口嵌入到WPF应用程序中后,我们可以通过调用外部窗口的方法或者访问其属性来与之进行交互。这样,我们就可以在WPF应用程序中方便地使用外部应用程序的功能。 总结起来,外部窗口嵌入到WPF应用程序中是一种通过WindowsFormsHost控件实现的方法。通过将外部窗口作为Windows Forms控件添加到WindowsFormsHost控件中,可以在WPF应用程序中显示外部窗口,并与之进行交互。这种技术可以扩展WPF应用程序的功能,提供更丰富的用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值