首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >从一个自动键控脚本运行另一个自动键控脚本?

从一个自动键控脚本运行另一个自动键控脚本?
EN

Stack Overflow用户
提问于 2020-12-05 02:38:03
回答 3查看 248关注 0票数 2

现在我有两个Autokey脚本(为了模块化),一个用来打开文件,另一个用来放入文本。

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

我已经尝试让3脚本只发送F1F2密钥,但计时完全不正确。如果我能从3调用12就更好了。这个是可能的吗?

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-12-05 04:26:23

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

engine.run_script("<description>")

应该做到这一点

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

票数 4
EN

Stack Overflow用户

发布于 2020-12-05 13:59:19

AutoKey不是递归的。它不会检查AutoKey短语或脚本的输出以查找热键或触发器缩写,从而调用进一步的操作。这就是你最初的解决方案不起作用的原因。

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

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

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

您可以通过Settings->Configure AutoKey->Script Engine从AutoKey主菜单中查找/设置模块目录。

目前,这种方法是有限的,因为以这种方式调用的脚本(很容易)不能访问API,因此它们不能包含任何AutoKey调用。我们计划在下一个主要版本AutoKey 0.96中解决这个问题。如果你现在真的需要这样做,请在我们的support listGitter上询问。

票数 3
EN

Stack Overflow用户

发布于 2021-10-12 09:28:21

我遇到了同样的问题,我发现解决该限制的唯一方法是使用exec()函数。因为带有要共享的函数的脚本已经在AutoKey用户文件夹中了,所以我使用了它。因此,为了将我的用户模块"mygame“的共享函数加载到我使用的autokey脚本中:

代码语言:javascript
代码运行次数:0
运行
复制
exec(open(engine.configManager.userCodeDir + "/" + "mygame.py").read())

为了避免在“导入”多个脚本时出现名称冲突,以及给人一种更像模块的感觉,我将函数放在类中,并使用一个名为模块的变量进行实例化。

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

mygame.py:

代码语言:javascript
代码运行次数:0
运行
复制
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中的用户脚本:

代码语言:javascript
代码运行次数:0
运行
复制
exec(open(engine.configManager.userCodeDir + "/" + "mygame.py").read())

mygame.GameReload():
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65148965

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档