我很难将单独工作的脚本结合起来......
基本上我有一个包含以下内容的批处理脚本:
START "" "mpc-hc64.exe" "video.avi"
这将在媒体播放器中打开我的视频。到目前为止一切顺利。然后我在 SO 和 SE 上阅读了一些关于如何通过 cmd/bat 在设置位置打开窗口的阅读材料,并在答案中发现了自动热键(文件:这里)所以我下载了一个带有可执行文件的 zip 文件并创建了一个 AHK 脚本:
Run mpc-hc64.exe
WinWait, Media Player Classic Home Cinema
WinActivate
WinMove A,, 960, 0, A_ScreenWidth-960, A_ScreenHeight-29
如果我运行此 cmd/bat,这将在屏幕右侧打开我的媒体播放器:
AutoHotkeyU32.exe "script 1.ahk"
现在我需要将以上所有内容合并为一批,如果我运行它,它将在我的媒体播放器中和屏幕右侧打开我的视频文件。有人可以帮忙吗?
答案1
您可以使用参数将命令行参数传递给脚本吗?
我没有测试下面的代码,但基本概念是在 .bat 文件和 .ahk 文件中使用命令行变量来捕获用户在命令行上输入的内容并将其传递以执行。
命令行
C:\>launch video.avi
启动脚本
@echo off
AutoHotkeyU32.exe "script 1.ahk" %1
脚本1.ahk
Run mpc-hc64.exe %1%
WinWait, Media Player Classic Home Cinema
WinActivate
WinMove A,, 960, 0, A_ScreenWidth-960, A_ScreenHeight-29
答案2
我找到了一种方法(在官方 discord AHK 频道上):
#Persistent
mpc := "C:\T4\mpc-hc 1.7.16 x64\mpc-hc64.exe"
avi := "C:\T1\scripts\avi.avi"
Run, % """" mpc """ """ avi """", , , pid
WinWaitActive, % "ahk_pid " pid
WinGet, mpc_hwnd, ID, % "ahk_pid " pid
SetTimer, CheckWindowPosition, 100
CheckWindowPosition:
if(!WinExist("ahk_pid " pid)) {
ExitApp
}
WinGetPos, x, y, width, height, % "ahk_pid " pid
WinGet, hwnd, ID, % "ahk_pid " pid
if(DllCall("GetParent", "Ptr", hwnd, "UInt", 3) = 0 && DllCall("GetAncestor", "Ptr", hwnd, "UInt", 3) = mpc_hwnd) {
if(x != 960 || y != 0 || width != A_ScreenWidth - 960 || height != A_ScreenHeight - 29) {
WinMove, % "ahk_pid " pid, , 960, 0, % A_ScreenWidth - 960, % A_ScreenHeight - 29
}
}
return