【已解决】求助A大,WMPlayer.OCX 如何改变画面大小?
本帖最后由 顽固不化 于 2024-7-29 09:58 编辑每次启动播放就是全尺寸,有些视频幅度超过屏幕了,目的是让尺寸超过屏幕的缩小一下。如果a大有暇,帮我看看,确诊一下问题出在哪。十分感谢!
$VideoURL = "B:\影视音乐\音乐\哥已不是当年的哥.mp4"
$obj = ObjCreate("WMPlayer.OCX")
$Gui = GUICreate("视频播放器", @DesktopWidth / 2, @DesktopHeight / 2)
$VideoPlayer = GUICtrlCreateObj($obj, 0, 0, @DesktopWidth / 2, @DesktopHeight / 2)
GUISetState(@SW_SHOW)
$obj.AllowChangeDisplaySize = 1 ;允许自由设置播放图象大小
$obj.DisplaySize = 6 ;'MpOneFourthScreen';6 = 屏幕大小的1/4,没效果
$obj.Settings.autoStart = True ;自动播放
$obj.uiMode = 'None' ;只显示画面
$obj.url=$VideoURL ;播放视频路径
While $obj.playState <> 3 ;等待开始播放
Sleep(100)
WEnd
;播放后修改 也没效果
$obj.Width =100
$obj.Height=@DesktopHeight / 2
While 1
If GUIGetMsg() =-3 Then exit
Sleep(100)
WEnd
播放后设置 $obj.fullScreen = True 试试~ afan 发表于 2024-7-28 18:36
播放后设置 $obj.fullScreen = True 试试~
谢谢a大,播放后用这句是可以全屏的,等同于双击的效果。我想把视频禁锢到一个窗口之中,不知怎么弄了。 本帖最后由 顽固不化 于 2024-7-28 21:10 编辑
afan 发表于 2024-7-28 18:36
播放后设置 $obj.fullScreen = True 试试~
a大,似乎找到一个办法,让画面固定到窗口播放,就是在显示窗口后加$obj.windowlessVideo=True,但又发现问题了,一是不能暂停,暂停就失效,而是播放中丢帧,卡卡巴巴的,不得要领。测试代码如下:
$VideoURL = "B:\影视音乐\音乐\哥已不是当年的哥.mp4"
$obj = ObjCreate("WMPlayer.OCX")
$Gui = GUICreate("视频播放器", @DesktopWidth /2, @DesktopHeight / 2)
$VideoPlayer = GUICtrlCreateObj($obj, 0, 0, @DesktopWidth / 2, @DesktopHeight / 2)
$obj.Settings.autoStart = True ;自动播放
$obj.uiMode = 'None' ;只显示画面
$obj.url=$VideoURL ;播放视频路径
While $obj.playState <> 3 ;等待开始播放
Sleep(100)
WEnd
GUISetState(@SW_SHOW)
$obj.windowlessVideo=True
Sleep(10000) ;播放10秒后暂停
$obj.controls.pause
Sleep(3000) ;暂停3秒后播放
$obj.controls.play
While 1
If GUIGetMsg() =-3 Then exit
Sleep(100)
WEnd
本帖最后由 afan 于 2024-7-29 00:05 编辑
顽固不化 发表于 2024-7-28 21:09
a大,似乎找到一个办法,让画面固定到窗口播放,就是在显示窗口后加$obj.windowlessVideo=True,但又发现 ...
用 WMPlayer.OCX 播放视频我还是几年前玩过,记得肯定是可以缩放大小的,不过不是你这个方式,是用 ObjCreateInterface 对相关接口的操作,具体代码不记得,找了一圈没找到…… 因为早改用 ffplay、mplayer 之类的做内核播放器了,强大多了。
WMPlayer.OCX 个人认为只适合简单单一的操作。 afan 发表于 2024-7-29 00:04
用 WMPlayer.OCX 播放视频我还是几年前玩过,记得肯定是可以缩放大小的,不过不是你这个方式,是用 ObjCre ...
好的a大,在研究一下你说的ObjCreateInterface,我也不折腾了,累,哈哈,,, afan 发表于 2024-7-29 00:04
用 WMPlayer.OCX 播放视频我还是几年前玩过,记得肯定是可以缩放大小的,不过不是你这个方式,是用 ObjCre ...
a大,很有意思。这也能曲线救国?~~~
$VideoURL = "B:\影视音乐\音乐\哥已不是当年的哥.mp4"
$obj = ObjCreate("WMPlayer.OCX")
$Gui = GUICreate("视频播放器", @DesktopWidth /2, @DesktopHeight / 2)
$VideoPlayer = GUICtrlCreateObj($obj, 0, 0, @DesktopWidth / 2, @DesktopHeight / 2)
$obj.Settings.autoStart = True ;自动播放
$obj.uiMode = 'None' ;只显示画面 (必须在创建控件后设置)
$obj.url=$VideoURL ;播放视频路径
While $obj.playState <> 3 ;等待开始播放
Sleep(100)
WEnd
GUISetState(@SW_SHOW)
$obj.windowlessVideo=True ;(必须在窗口显示后设置)
Sleep(5000) ;播放5秒后暂停
GUICtrlCreateObj($obj, 0, 0,0,0) ;暂停命令的前后各创建一次控件
$obj.controls.pause
GUICtrlCreateObj($obj, 0, 0,0,0)
Sleep(5000) ;暂停5秒后播放
$obj.controls.play
GUICtrlCreateObj($obj, 0, 0,0,0) ;继续命令的后面创建一次控件
While 1
If GUIGetMsg() =-3 Then exit
Sleep(100)
WEnd 官网的例子,不知道是不是你要的效果。
#include <Constants.au3>
#include <StructureConstants.au3>
#include <GUIConstants.au3>
Local $hGui = GUICreate("WMPlayer", 400, 300)
Local $oPlayer = ObjCreate("WMPlayer.OCX")
If Not IsObj($oPlayer) Then Exit MsgBox($MB_SYSTEMMODAL, "WMPlayer.OCX", "Cannot create a WMP object.", 5)
GUICtrlCreateObj($oPlayer, 0, 0, 400, 300)
With $oPlayer
.URL = "B:\影视音乐\音乐\哥已不是当年的哥.mp4"
.uiMode = "none"
.settings.mute = False
EndWith
While $oPlayer.playState = 9
Sleep(50)
WEnd
GUISetState()
ResizeOCX($oPlayer, 0, 0, 400, 300)
While $oPlayer.playState = 3
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Func ResizeOCX($oObject, $iLeft, $iTop, $iRight, $iBottom)
Local Const $tagIOleInPlaceObj = _
"ContextSensitiveHelp none(int); " & _
"GetWindow none(ptr); " & _
"InPlaceDeactivate none(); " & _
"ReactivateAndUndo none(); " & _
"SetObjectRects none(ptr; ptr;); " & _
"UIDeactivate none();"
Local $oIInPlace = ObjCreateInterface($oObject, "{00000113-0000-0000-C000-000000000046}", $tagIOleInPlaceObj)
Local $tRect = DllStructCreate($tagRECT)
$tRect.Left = $iLeft
$tRect.Top = $iTop
$tRect.Right = $iRight
$tRect.Bottom = $iBottom
Local $pRect = DllStructGetPtr($tRect)
$oIInPlace.SetObjectRects($pRect, $pRect)
EndFunc ;==>ResizeOCX
lpxx 发表于 2024-7-30 23:50
官网的例子,不知道是不是你要的效果。
a大上次说的可能就是用这个ObjCreateInterface。
非常非常的感谢您,正是我需要的,向您致敬!。
顽固不化 发表于 2024-7-30 22:33
a大,很有意思。这也能曲线救国?~~~
这都被你研究出来了,厉害~!
虽然不记得具体代码,但 lpxx 的代码应该就是我所指的操作接口的方式~ afan 发表于 2024-7-31 10:51
这都被你研究出来了,厉害~!
虽然不记得具体代码,但 lpxx 的代码应该就是我所指的操作接口的方式~ ...
喜欢折腾。
现在明白这个接口意义了,看来以后得重写《播放器》代码,现在改起来有点麻烦。
页:
[1]