python控制键盘按键_如何通过Python生成键盘按键事件来控制PP的表示?

您可以为Python使用Quartz库,例如#!/usr/bin/python

# Script simulating keyboard events in macOS.

# See: https://stackoverflow.com/q/13564851/55075

import sys

import time

from Quartz.CoreGraphics import CGEventCreateKeyboardEvent

from Quartz.CoreGraphics import CGEventPost

from Quartz.CoreGraphics import kCGHIDEventTap

#from Quartz.CoreGraphics import CFRelease # Python releases things automatically.

class Keyboard():

shiftChars = {

'~': '`',

'!': '1',

'@': '2',

'#': '3',

'$': '4',

'%': '5',

'^': '6',

'&': '7',

'*': '8',

'(': '9',

')': '0',

'_': '-',

'+': '=',

'{': '[',

'}': ']',

'|': '\\',

':': ';',

'"': '\'',

'

'>': '.',

'?': '/'

}

keyCodeMap = {

'a' : 0x00,

's' : 0x01,

'd' : 0x02,

'f' : 0x03,

'h' : 0x04,

'g' : 0x05,

'z' : 0x06,

'x' : 0x07,

'c' : 0x08,

'v' : 0x09,

'b' : 0x0B,

'q' : 0x0C,

'w' : 0x0D,

'e' : 0x0E,

'r' : 0x0F,

'y' : 0x10,

't' : 0x11,

'1' : 0x12,

'2' : 0x13,

'3' : 0x14,

'4' : 0x15,

'6' : 0x16,

'5' : 0x17,

'=' : 0x18,

'9' : 0x19,

'7' : 0x1A,

'-' : 0x1B,

'8' : 0x1C,

'0' : 0x1D,

']' : 0x1E,

'o' : 0x1F,

'u' : 0x20,

'[' : 0x21,

'i' : 0x22,

'p' : 0x23,

'l' : 0x25,

'j' : 0x26,

'\'' : 0x27,

'k' : 0x28,

';' : 0x29,

'\\' : 0x2A,

',' : 0x2B,

'/' : 0x2C,

'n' : 0x2D,

'm' : 0x2E,

'.' : 0x2F,

'`' : 0x32,

'k.' : 0x41,

'k*' : 0x43,

'k+' : 0x45,

'kclear' : 0x47,

'k/' : 0x4B,

'k\n' : 0x4C,

'k-' : 0x4E,

'k=' : 0x51,

'k0' : 0x52,

'k1' : 0x53,

'k2' : 0x54,

'k3' : 0x55,

'k4' : 0x56,

'k5' : 0x57,

'k6' : 0x58,

'k7' : 0x59,

'k8' : 0x5B,

'k9' : 0x5C,

# keycodes for keys that are independent of keyboard layout

'\n' : 0x24,

'\t' : 0x30,

' ' : 0x31,

'del' : 0x33,

'delete' : 0x33,

'esc' : 0x35,

'escape' : 0x35,

'cmd' : 0x37,

'command' : 0x37,

'shift' : 0x38,

'caps lock' : 0x39,

'option' : 0x3A,

'ctrl' : 0x3B,

'control' : 0x3B,

'right shift' : 0x3C,

'rshift' : 0x3C,

'right option' : 0x3D,

'roption' : 0x3D,

'right control' : 0x3E,

'rcontrol' : 0x3E,

'fun' : 0x3F,

'function' : 0x3F,

'f17' : 0x40,

'volume up' : 0x48,

'volume down' : 0x49,

'mute' : 0x4A,

'f18' : 0x4F,

'f19' : 0x50,

'f20' : 0x5A,

'f5' : 0x60,

'f6' : 0x61,

'f7' : 0x62,

'f3' : 0x63,

'f8' : 0x64,

'f9' : 0x65,

'f11' : 0x67,

'f13' : 0x69,

'f16' : 0x6A,

'f14' : 0x6B,

'f10' : 0x6D,

'f12' : 0x6F,

'f15' : 0x71,

'help' : 0x72,

'home' : 0x73,

'pgup' : 0x74,

'page up' : 0x74,

'forward delete' : 0x75,

'f4' : 0x76,

'end' : 0x77,

'f2' : 0x78,

'page down' : 0x79,

'pgdn' : 0x79,

'f1' : 0x7A,

'left' : 0x7B,

'right' : 0x7C,

'down' : 0x7D,

'up' : 0x7E

}

# See: https://stackoverflow.com/q/3202629/55075

def toKeyCode(self, c):

shiftKey = False

# Letter

if c.isalpha():

if not c.islower():

shiftKey = True

c = c.lower()

if c in Keyboard.shiftChars:

shiftKey = True

c = Keyboard.shiftChars[c]

if c in Keyboard.keyCodeMap:

keyCode = Keyboard.keyCodeMap[c]

else:

keyCode = ord(c)

return keyCode, shiftKey

def KeyDown(self, k):

keyCode, shiftKey = self.toKeyCode(k)

time.sleep(0.0001)

if shiftKey:

CGEventPost(kCGHIDEventTap, CGEventCreateKeyboardEvent(None, 0x38, True))

time.sleep(0.0001)

CGEventPost(kCGHIDEventTap, CGEventCreateKeyboardEvent(None, keyCode, True))

time.sleep(0.0001)

if shiftKey:

CGEventPost(kCGHIDEventTap, CGEventCreateKeyboardEvent(None, 0x38, False))

time.sleep(0.0001)

def KeyUp(self, k):

keyCode, shiftKey = self.toKeyCode(k)

time.sleep(0.0001)

CGEventPost(kCGHIDEventTap, CGEventCreateKeyboardEvent(None, keyCode, False))

time.sleep(0.0001)

def KeyPress(self, k):

keyCode, shiftKey = self.toKeyCode(k)

time.sleep(0.0001)

if shiftKey:

CGEventPost(kCGHIDEventTap, CGEventCreateKeyboardEvent(None, 0x38, True))

time.sleep(0.0001)

CGEventPost(kCGHIDEventTap, CGEventCreateKeyboardEvent(None, keyCode, True))

time.sleep(0.0001)

CGEventPost(kCGHIDEventTap, CGEventCreateKeyboardEvent(None, keyCode, False))

time.sleep(0.0001)

if shiftKey:

CGEventPost(kCGHIDEventTap, CGEventCreateKeyboardEvent(None, 0x38, False))

time.sleep(0.0001)

def Type(self, text):

for key in text:

self.KeyDown(key)

self.KeyUp(key)

下面是使用上述类的演示代码:# DEMO

if __name__ == '__main__':

keyboard = Keyboard()

if sys.platform == "darwin":

keyboard.Type('Hello World!')

elif sys.platform == "win32":

print("Error: Platform not supported!")

它将模拟在当前窗口上键入Hello World!文本。

上面的代码可以作为shell脚本运行。检查指向^{} file的链接。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值