每次打开 Wine 程序时,我都需要执行一个小脚本。这个脚本非常简单:
#!/bin/bash
xdotool windowmove 67108871 1440 0
我如何让 PlayOnLinux 每次打开某个程序时运行该脚本?
答案1
我不使用 PlayOnLinux,但也许通用方法会有些用处。
基本思想是将调用脚本(现在运行程序的脚本)替换为一个新的脚本,该脚本在运行调用脚本之前或之后运行新脚本(以最适合您想要完成的任务为准 - 在您的情况下可能是之后)。
如果你的脚本可以运行前您的程序,那么您所要做的就是找到调用您的程序的脚本或程序,并用另一个脚本替换它(如果可能的话,使用不同的名称,以免造成混淆或更糟的情况)。
新脚本将运行您的安装脚本,然后运行原始脚本来调用您的程序(如果新脚本与原始脚本同名,则使用调用脚本的完整路径 - 以避免无限循环。)
如果你的脚本必须运行后您的程序已启动(您的情况可能如此),这要棘手得多。我不知道该怎么做,但我会先获取程序的进程号,然后看看能否从进程号查找窗口。(我没有使用过 xdotool,但查看其描述表明,使用 xdotool search 或 xdotool getactivewindow windowmove ... 可能会有用。看来只要您知道窗口的唯一名称,您就可以做任何您想做的事情。)
如果您可以让它工作,那么调用它只需要调用原始脚本,然后调用您的脚本。为此,您的新调用脚本将调用原始脚本,然后调用您的新脚本。但是,您的调用脚本可能不会将控制权交还给您的脚本,直到您的程序完全完成并且运行新脚本为时已晚。
如果您可以在调用脚本后加上 & 以使其在后台运行,则控制权将立即返回到脚本,您可以立即运行新脚本来修改窗口。如果这有效,那么 $! 将包含调用脚本的进程号(如果有帮助的话)。
高血压
答案2
尝试一下:
假设要启动的程序的文件名是鸟类程序从 C:\Program Files\
bash 脚本的开头复制此代码(带有修改后的文件名)。
while ! ( ps aux |grep -v 'grep' | grep 'Birds.exe' >/dev/null ); do echo 'waiting for pgm to start...'; sleep 1; done; echo "Program 'Birds.exe' stared'"
将 Birds.exe 更改为正确的文件名。这样,脚本的其余部分仅在程序启动时执行。