- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直在使用 MPC-HC 窗口的状态文本来确定视频是正在播放还是暂停。但是,在全屏模式下或隐藏状态栏时,状态文本不会更新。有人向 MPC-HC 团队指出了这个错误,但尚未解决:https://trac.mpc-hc.org/ticket/5640
我已经尝试使用 MPC-HC API 获取媒体播放器的状态,但这需要我使用/slave 命令运行 MPC-HC 才能触发 WM_COPYDATA,这是我不想要的。
这里有关于该方法的更多信息:
media player classic - jump to point in video/audio programmatically
这是我现在使用的代码。如果状态栏不可见,则失败。
IsMediaPlayerClassicPlaying() {
ControlGetText, vPlayPause, Static3 , ahk_class MediaPlayerClassicW
If InStr(vPlayPause, "Playing")
Return True
Else
Return False
我希望函数在 MPC 播放视频时返回 True,但它仅在状态栏可见时有效。如果不可见,MPC 似乎不会更新状态栏文本(播放/暂停)。
最佳答案
使用音频端点的唯一缺点是视频没有声音。没有静音,没有音轨。
所以,我可以想到另外两种方法。
使用 MPC API:您不需要使用 /slave
命令行运行 MPC。即使您已经在运行 MPC,它也只需要执行带有 /slave
开关的 Run
命令来告诉 MPC AHK 将与其通信。
然后monitor会在每次播放状态改变的时候更新一个全局变量。无法直接查询状态,只能更改。
要对此进行测试,请打开 MPC 和任何视频,然后打开此 AHK 脚本。 F1
将连接,F2
将为您提供状态。警告:连接后状态不会更新,只有在第一次状态更改后变量才有意义。
global isMediaPlayerClassicPlaying := -1
OnMessage(WM_COPYDATA := 0x4A, "WM_COPYDATA")
; Connect MPC with AHK
F1::Run % "mpc-hc64.exe /slave " A_ScriptHwnd + 0, D:\Apps\Media Player Classic
F2::MsgBox % isMediaPlayerClassicPlaying
WM_COPYDATA(wParam, lParam)
{
dwData := NumGet(lParam + 0)
lpData := NumGet(lParam + A_PtrSize * 2)
lpData := StrGet(lpData)
if (dwData = 0x50000000) ; CMD_CONNECT := 0x50000000
{
WinGetClass vWinClass, % "ahk_id" lpData
if (vWinClass = "MediaPlayerClassicW")
OutputDebug MPC API on
}
if (dwData = 0x50000002) ; CMD_PLAYMODE := 0x50000002
isMediaPlayerClassicPlaying := (lpData = 0)
return true
}
第二个选项是最可靠的,但有点慢(大约需要 1 秒)。在选项中启用 web interface ,然后使用这个脚本:
F1::MsgBox % IsMediaPlayerClassicPlaying()
IsMediaPlayerClassicPlaying()
{
url := "http://localhost:13579/variables.html"
whr := ComObjCreate("WinHttp.WinHttpRequest.5.1")
whr.Open("GET", url, false)
whr.Send()
RegExMatch(whr.ResponseText, "(?<=state..)\d", state)
return state = 2
}
关于media-player - 在 Media Player Classic - 使用 AutoHotkey 的家庭影院中检索播放/暂停状态的更可靠方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57540249/
我是一名优秀的程序员,十分优秀!