现在我有两个Autokey脚本(为了模块化),一个用来打开文件,另一个用来放入文本。
打开文件的脚本具有热键F1
(为简单起见,我们将其称为1
),而将文本放入其中的脚本具有热键F2
。我想要一个新的自动关键点脚本,当我点击F3
时,它会同时运行1
脚本和2
脚本。
我已经尝试让3
脚本只发送F1
和F2
密钥,但计时完全不正确。如果我能从3
调用1
和2
就更好了。这个是可能的吗?
谢谢!
发布于 2020-12-04 20:26:23
engine.run_script("<description>")
应该做到这一点
此上下文中的“描述”通常是AutoKey界面中侧边栏中的脚本的名称。如果打开脚本的.json
文件,您肯定会看到它,但它将是侧栏中显示的名称,除非您在同一文件夹或其他边缘方案中有重复的脚本名称
发布于 2020-12-05 05:59:19
AutoKey不是递归的。它不会检查AutoKey短语或脚本的输出以查找热键或触发器缩写,从而调用进一步的操作。这就是你最初的解决方案不起作用的原因。
这取决于你实际想要做什么。
如果你有多个独立有用的脚本,最好的方法是@Icallitvera提供的。
如果您只想模块化共享功能,您可以创建AutoKey函数模块,并将它们放在Python模块目录中。然后,可以将它们导入到任何需要它们的AutoKey脚本中。
您可以通过Settings->Configure AutoKey->Script Engine
从AutoKey主菜单中查找/设置模块目录。
目前,这种方法是有限的,因为以这种方式调用的脚本(很容易)不能访问API,因此它们不能包含任何AutoKey调用。我们计划在下一个主要版本AutoKey 0.96中解决这个问题。如果你现在真的需要这样做,请在我们的support list或Gitter上询问。
发布于 2021-10-12 01:28:21
我遇到了同样的问题,我发现解决该限制的唯一方法是使用exec()
函数。因为带有要共享的函数的脚本已经在AutoKey用户文件夹中了,所以我使用了它。因此,为了将我的用户模块"mygame“的共享函数加载到我使用的autokey脚本中:
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():
https://stackoverflow.com/questions/65148965
复制