18.9 控制键盘Python


18.9    控制键盘
pyautogui 也有一些函数向计算机发送虚拟按键,让你能够填充表格,或在应用中输入文本。

18.9.1   通过键盘发送一个字符串
pyautogui.typewrite() 函数向计算机发送虚拟按键。这些按键产生什么效果,取决于当前获得焦点的窗口和文本输入框。可能需要先向文本输入框发送一次鼠标点击,确保它获得焦点。
举一个简单的例子,让我们用 Python  自动化在文件编辑窗口中输入 Hello world!。首先, 打开一个新的文件编辑窗口, 将它放在屏幕的左上角, 以便 pyautogui 
点击正确的位置,让它获得焦点。然后,在交互式环境中输入以下内容:
>>>  pyautogui.click(100,  100);  pyautogui.typewrite('Hello  world!')

请注意,在同一行中放两条命令,用分号隔开,这让交互式环境不会在两个指令之间提示输入。这防止了你在 click() 和 typewrite() 调用之间,不小心让新的窗口获得焦点,从而让这个例子失败。
Python 首先在坐标(100,100)处发出虚拟鼠标点击,这将点击文件编辑窗口,让它获得焦点。typewrite() 函数调用将向窗口发送文本 Hello  world!,结果就像图 
18-3。现在有了替你打字的代码!

默认情况下,typewrite() 函数将立即打印出完整字符串。但是,你可以传入可选的
 

第二参数,在每个字符之间添加短时间暂停。例如,pyautogui.typewrite('Helloworld!', 0.25)将在打出H 后等待1/4 秒。打出e 以后再等待 1/4 
秒,如此等等。这种渐进的打字机效果,对于较慢的应用可能有用,它们处理击键的速度不够快,跟不上pyautogui。
对于A 或!这样的字符,pyautogui 将自动模拟按住Shift 键。

18.9.2   键名

不是所有的键都很容易用单个文本字符来表示。例如,如何把Shift 键或左箭头


键表示为单个字符?在 PyAutoGUI 中,这些键表示为短的字符串值:'esc' 表示 Esc 键,
'enter' 表示 Enter。
除了单个字符串参数,还可以向 typewrite() 函数传递这些键字符串的列表。例如,以下的调用表示按 a 键,然后是 b 键,然后是左箭头两次,最后是X 和Y 键:
>>>  pyautogui.typewrite(['a',  'b',  'left',  'left',  'X',  'Y'])

因为按下左箭头将移动键盘光标,所以这会输出 XYab。表 18-1  列出了 pyautogui
的键盘键字符串,你可以将它们传递给 typewrite() 函数,模拟任何按键组合。
也可以查看 pyautogui.KEYBOARD_KEYS 列表,看看 pyautogui  接受的所有可能的键字符串。'shift' 字符串指的是左边的 Shift  键,它等价于 
'shiftleft'。'ctrl'、 'alt' 和 'win' 字符串也一样,它们都是指左边的键。
表 18-1    PyKeyboard 属性
键盘键字符串                                         含义
'a', 'b', 'c', 'A', 'B', 'C', '1', '2', '3',


'!', '@', '#',等等

单个字符的键


'enter'(or 'return' or '\n')                  回车键
'esc'                                                                        Esc 键
'shiftleft', 'shiftright'                                               左右 Shift 键
'altleft', 'altright'                                                     左右 Alt 键
'ctrlleft', 'ctrlright'                                                  左右Ctrl 键
'tab'(or '\t')                            Tab 键
'backspace', 'delete'                                                Backspace 和 Delete 键
'pageup', 'pagedown'                                              Page Up 和 Page Down 键
'home', 'end'                                                           Home 和 End 键
'up', 'down', 'left', 'right'                                         上下左右箭头键
'f1', 'f2', 'f3',等等                        F1 至 F12 键
'volumemute', 'volumedown', 'volumeup'              静音、减小音量、放大音量键(有些键盘没有这些键,但你
的操作系统仍能理解这些模拟的按键)
'pause'                                                                    Pause 键

18.9.3   按下和释放键盘
就像 mouseDown() 和 mouseUp() 函数一样,pyautogui.keyDown() 和 pyautogui. keyUp() 
将向计算发送虚拟的按键和释放。它们将根据参数发送键字符串(参见表 18-1)。方便起见,pyautogui 提供了pyautogui.press() 函数,它调用这两个函数,模拟完整的击键。
运行下面的代码,它将打印出美元字符(通过按住Shift 键并按 4 得到):
>>>  pyautogui.keyDown('shift');  pyautogui.press('4');  pyautogui.keyUp('shift')

这行代码按下 Shift,按下(并释放)4,然后再释放 Shift。如果你需要在文本输入框内打一个字符串,typewrite() 函数就更适合。但对于接受单个按键命令的应用,press() 
函数是更简单的方式。

18.9.4   热键组合
“热键”或“快捷键”是一种按键组合,它调用某种应用功能。拷贝选择内容的常用热键是 Ctrl-C(在 Windows 和 Linux 上)或  -C(在 OS  X 上)。用户按住 Ctrl 
键,然后按C 键,然后释放C 和Ctrl 键。要用pyautogui 的keyDown() 和keyUp() 函数来做到这一点,必须输入以下代码:
pyautogui.keyDown('ctrl') pyautogui.keyDown('c') pyautogui.keyUp('c') pyautogui.keyUp('ctrl')

这相当复杂。作为替代,可以使用 pyautogui.hotkey() 函数,它接受多个键字符串参数,按顺序按下,再按相反的顺序释放。例如对于 Ctrl-C,代码就像下面这样简单:
pyautogui.hotkey('ctrl',  'c')

对于更大的热键组合,这个函数特别有用。在 Word 中,Ctrl-Alt-Shift-S 热键组合显示 Style(样式)窗口。不必使用 8 次不同的函数调用(4 次 keyDown() 调用和 4 
次 keyUp() 调用),你只要调用 hotkey('ctrl', 'alt', 'shift', 's')。
在屏幕的左上角打开一个新的 IDLE 文件编辑窗口,在交互式环境中输入以下
内容(在OS X 中,用 'ctrl' 代替 'alt'):

>>>  import  pyautogui,  time
>>>  def  commentAfterDelay():
➊                 pyautogui.click(100,  100)
➋                 pyautogui.typewrite('In  IDLE,  Alt-3  comments  out  a  line.') 
time.sleep(2)
➌                 pyautogui.hotkey('alt',  '3')

>>>  commentAfterDelay()

这定义了一个函数 commentAfterDelay(),在被调用时,将点击文件编辑窗口,让它获得焦点➊,输出“In IDLE,Alt-3 comments out a 
line”➋,暂停2秒钟,然后模拟按下 Alt-3 热键(或 OS  X 上的 ctrl-3)➌。这个快捷键在当前行加上两个#字符,将它注释掉(在 
IDLE 中编写你自己的代码时,这是一个有用的技巧,应该知道)。
 

 

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大飞哥软件自习室

希望支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值