【问题标题】:Python "keyboard" module: Release keys to allow copy/Ctrl+CPython“键盘”模块:释放键以允许复制/Ctrl+C
【发布时间】:2019-12-09 08:45:17
【问题描述】:

我正在尝试使用 Python 中的“键盘”模块模拟现有的 AutoHotKey 脚本(因为 AHK 脚本的部署故事似乎比 Python 脚本更糟糕)。

在这个脚本中,我使用了键盘快捷键(左 Windows 键+F12),它应该触发“复制”命令,允许我通过 pyperclip 或 win32clipboard 检索复制的文本,对其进行修改,并将选定的文本替换为输入新文本

这里是win32clipboard版本的代码:

import keyboard
import win32clipboard

def on_triggered():
    keyboard.press_and_release('ctrl+c')
    win32clipboard.OpenClipboard()
    new_data = win32clipboard.GetClipboardData()
    win32clipboard.CloseClipboard()
    keyboard.write(new_data + ' duuuuude.')

keyboard.add_hotkey('left windows+F12', on_triggered)

我已经简化了上面的脚本,删除了一些管理代码(保存、清除和恢复现有剪贴板内容)。

据我所知,当“ctrl+c”被触发时,“左窗口+F12”仍然被按住,并且文本实际上从未被复制。有没有办法告诉“键盘”库忽略所有当前的键盘输入?还是我采取了错误的方法?

【问题讨论】:

  • 您找到解决方案了吗?
  • 很遗憾没有。我想我会尝试弄清楚如何部署 AutoHotKey 并使用 Python 脚本修改 AutoHotKey 脚本,以便做我需要做的事情。
  • 其实我找到了一个解决方法,我只是在回调函数中创建了一个线程,我让线程休眠0.3s然后执行我的代码,它工作得很好。
  • 不错!我从来没有将 Python 线程用于任何有用的东西,这应该会给我我需要的动力。随意发布作为答案。

标签: python automation keyboard-shortcuts ui-automation keyboard-events


【解决方案1】:

在这里你也可以使用 python 的“PyAutoGui”模块。 代码非常简单,非常简短。

例如。

pyautogui.hotkey('ctrl', 'c')  # ctrl-c to copy
pyautogui.hotkey('ctrl', 'v')  # ctrl-v to paste

【讨论】:

  • 谢谢,我相信我先尝试了 pyautogui,它和键盘模块有同样的问题。需要有某种方法来接受我使用的其他键命令并在执行复制/粘贴之前释放这些键。
猜你喜欢
  • 1970-01-01
  • 2019-03-05
  • 2017-12-22
  • 1970-01-01
  • 2020-05-07
  • 1970-01-01
  • 1970-01-01
  • 2014-01-11
  • 1970-01-01
相关资源
最近更新 更多