首页 文章

可以使用Python向Mac发送真正的按键事件

提问于
浏览
6

我的问题是,有没有办法用Applecript / python可靠地将一个键放在mac上?

我几乎到处搜索这样的主题,然而,他们都没有削减它 . 我试图使用Python从Arduino读取串行信息,然后将这些信号作为按键传递 . 我已经看到如何使用applescript向系统事件发送“key down”,如下面的代码所示:

(Python code)
    def SendDown(key):
    string = str(key)
    cmd = """osascript -e 'tell application "System Events" to key down (key code """ + string   + ")'"
    os.system(cmd)

此代码通常有效,但我想控制Google飞行模拟器 . 当我尝试这样做时,按键似乎是快速的方式,飞行模拟器或基本的谷歌地球 Map 移动我期望的部分 .

他们使用这段代码的方式基本上如下(suedocode)

if (ArduinoMessage == "left"):
    SendDown(leftKey) #leftKey has been set to 123 -- the code for the left arrow key
    etc...

从我的角度来看,我发送的按键事件基本上是一个快速键击,而键没有被按下 . 我尝试直接在applescript中编写关键事件,并取得了一些成功 . 我的代码看起来像这样:

tell application "System Events"
    repeat 50 times    
        key down (key code 123)
    end repeat
    key up (key code 123)
end tell

该代码移动谷歌地球 Map 的次数超过了我所获得的数量,但需要花费很长时间才能让它移动少量(远远少于正常的箭头键) . 然后我试着将这个AppleScript写入Python并且失去了所有改进 .

所以我重申一下这个问题 - 有没有办法用Applecript / python可靠地将一个键放在mac上?

我能够很容易地在Windows上使用它,但是,我能够使用一个名为SendKeys的Windows专用库,专为此类应用程序而设计 .

任何帮助,将不胜感激 .

谢谢,

可靠的人

1 回答

  • 2

    使用PyUserInput . 请尝试以下代码 .

    import time
    
    import pykeyboard
    
    
    # TODO: Replace following two lines with the code that activate the application.
    print('Activate the application 3 seconds.')
    time.sleep(3)
    
    k = pykeyboard.PyKeyboard()
    k.press_key(k.left_key)
    time.sleep(1) # Hold down left key for 1 second.
    k.release_key(k.left_key)
    

    不幸的是我没有Mac . 我在Linux,Windows中测试过 .

相关问题