运行 一个 Autokey 脚本来自另一个 Autokey 脚本?

Running one Autokey script from another Autokey script?

现在我有两个 Autokey 脚本(用于模块化),一个用于打开文件,一个用于将文本放入其中。

打开文件的热键为F1(为简单起见,我们将此脚本称为1),而将文本放入其中的热键为F2 .我想要一个新的 Autokey 脚本,当我点击 F3 时,它会同时运行 1 脚本和 2 脚本。

我试过让 3 脚本只发送 F1F2 键,但时机已到。如果我可以从 3 调用 12 会更好。这可能吗?

谢谢!

https://github.com/autokey/autokey/blob/fc7c6b90f3f28a57ad256829ef2b69e3be5148d2/lib/autokey/scripting.py#L1242

engine.run_script("<description>")

应该做到这一点

此处的“描述”一般为AutoKey界面侧边栏中脚本的名称。如果您打开脚本的 .json 文件,您肯定会看到它,但它将是侧栏中显示的名称,除非您在同一文件夹或其他一些边缘场景中有重复的脚本名称

AutoKey 不是递归的。它不会检查 AutoKey 短语或脚本的输出来查找热键或触发将调用进一步操作的缩写。这就是为什么您的初始解决方案不起作用的原因。

这取决于您实际想要做什么。

如果您有多个独立有用的脚本,最好的方法是@Icallitvera 提供的方法。

如果您只想模块化共享功能,您可以创建 Python 个功能模块并将它们放在 AutoKey Modules 目录中。然后,您可以将它们导入到任何需要它们的 AutoKey 脚本中。

您可以通过 Settings->Configure AutoKey->Script Engine 从 AutoKey 主菜单 find/set 模块目录。

目前,这种方法是有限的,因为以这种方式调用的脚本无法(轻松)访问 AutoKey API,因此它们不能包含任何 API 调用。我们计划在下一个主要版本 AutoKey 0.96 中修复此问题。如果您现在真的需要这样做,请在我们的 support list or on Gitter.

上询问

我 运行 遇到了同样的问题,我发现解决该限制的唯一方法是使用 exec() 函数。由于具有共享功能的脚本已经在我使用的 AutoKey 用户文件夹中。因此,为了将我的用户模块“mygame”的共享功能加载到我使用的自动键脚本中:

exec(open(engine.configManager.userCodeDir + "/" + "mygame.py").read())

为了避免“导入”多个脚本时的名称冲突和更像模块的感觉,我将函数放在 类 中,并使用名称与模块类似的变量实例化。

所以最后看起来是这样的:

mygame.py:

import time

class MyGame:
    def GameReload(self):
        self.GameExitNoSave()
        time.sleep(0.3)
        self.GameLoadCurrent()

    def GameExitNoSave(self):
        keyboard.send_key('d')
        time.sleep(0.1)
        keyboard.send_key('<up>')
        time.sleep(0.05)
        keyboard.send_key('<enter>')

    def GameLoadCurrent(self):
        keyboard.send_key('<down>')
        time.sleep(0.1)
        keyboard.send_key('<down>')
        time.sleep(0.1)
        keyboard.send_key('<enter>')
        time.sleep(0.5)
        keyboard.send_key('<enter>')
        
mygame = MyGame()   

AutoKey 中的用户脚本:

exec(open(engine.configManager.userCodeDir + "/" + "mygame.py").read())

mygame.GameReload():