【发布时间】:2020-01-07 11:17:41
【问题描述】:
我正在尝试创建一种方法来使用以下组合键选择记事本文件的文本内容:CTRL+END 然后 SHIFT+HOME
我有以下代码来按下、按住和释放一系列键:
import win32api
import win32con
import win32gui
import time
def keyboard_press_hold_release(*keys):
for k in keys:
win32api.keybd_event(VK_CODE[k], 0, 0, 0)
time.sleep(.05)
for k in keys:
win32api.keybd_event(VK_CODE[k], 0, win32con.KEYEVENTF_KEYUP, 0)
time.sleep(.1)
并调用它来组合 CTRL+END 和 SHIFT+HOME:
keyboard_press_hold_release('ctrl', 'end')
keyboard_press_hold_release('shift', 'home')
结果是 CTRL+END 命令有效,但 SHIFT+HOME 没有选择文本,只需将光标移动到行首。
怎么了?
【问题讨论】:
-
不要使用
keybd_event。它的文档非常清楚地表明输入伪造的正确 API 是SendInput。但不要伪造输入。使用 UI 自动化。 -
顺便说一句,Ctrl+A 是一个快捷键。
-
@DavidHeffernan 你对 UI 自动化库有什么建议吗?
-
@ipaleka,这个解决方案的真正用途不会是记事本,而是另一个不支持Ctrl+A行为的应用程序。
-
好的。另一个顺便说一句:您需要
Ctrl + Shift + Home才能在以Ctrl + End结尾后选择所有文本。但是它错过了解释为什么您的 line 未被选中...