【问题标题】:Copying to clipboard without pressing ctrl+c不按 ctrl+c 复制到剪贴板
【发布时间】:2018-10-04 20:04:05
【问题描述】:

背景

我有一个基于热键和剪贴板调用各种函数的程序。我正在使用pyperclipaoikhotkey。这种组合效果很好。但是,如果可能的话,我想进一步改进它。目前,我的工作流程如下:

  1. 使用鼠标突出显示目标文本
  2. 按 Ctrl+c 将其放入剪贴板
  3. 按我的热键组合调用使用剪贴板内容的函数。

我想取消第 2 步,让热键调用的函数“抓取”屏幕上的内容(可能使用鼠标或光标事件监控)。

问题

有人对我如何做到这一点有任何想法吗?我怀疑我可能能够以某种方式使用Tkinter 来完成此任务,但我没有使用Tkinter 的任何经验,所以如果有人有任何建议或提示,我将不胜感激。

参考

这里有一篇帖子提出了类似的问题,但使用的是 Autohotkey 脚本语言:

Get Selected Text Without Using the Clipboard

更新

这个问题的标题最初是“Getting selected text without using the clipboard”。但是,我更改了它,因为这个问题的 cmets 部分有助于阐明我的实际需求和目标。

【问题讨论】:

  • 最简单的解决方案是以合适的速度轮询剪贴板,并在剪贴板内容发生变化时采取行动,这可以通过 tkinters Tk.after 方法实现,但是如果您实际上并未使用该库其他任何事情都将是矫枉过正,简单地使用带有睡眠的循环可能就足够了,但是您需要确定足够的轮询率
  • @JamesKent 感谢您的建议。实际上,我想避免一起使用剪贴板,而只使用鼠标或光标事件来自动抓取我在屏幕上突出显示的文本。这样我就可以使用我的热键,而无需先将任何内容复制到剪贴板。
  • 您可能遇到的问题是,对于控制自己的渲染的窗口,可能根本无法抓取。为什么不尝试添加一个钩子来捕获全局 control+c 事件,然后在短暂延迟后从剪贴板获取数据?没有额外的击键,也没有重新发明轮子?
  • @DanielR.Livingston 你是对的。要解决这个问题,我需要从低级的“第一原则”开始。我一直在考虑更多,我意识到我误解了我最初的目标。 @JamesKent 提出了一些有用的建议,我想我会按照他的建议探索使用钩子的选项。感谢您的帮助,并为我最初的问题指明了正确的方向。
  • @stevecody 非常感谢。我的 OP 的这个 cmets 部分让我相信,我最初的目标是不合理的,而且可能不可靠。所以,基本上,我现在正在研究一种利用剪贴板的解决方案。但是,您的解决方案似乎很容易。所以,基本上,我可以 1) 用鼠标选择文本,2) 运行热键,3) 调用 pyautogui.hotkey('Ctrl','c'),最后,我可以 4) 使用 pyperclip.paste() 抓取文本。稍后我会在阅读更多文档后尝试一下。再次感谢。我想这可能正是我一直在寻找的。​​span>

标签: python tkinter


【解决方案1】:

我认为不使用剪贴板选择文本是不可能的,您将需要剪贴板来复制文本 (Ctrl+c) - 您可以使用键盘设备通过按键来执行此操作,或者您可以通过命令发送来执行此操作一个热键笔划:

pyautogui.hotkey('Ctrl','c')

使用 python 包 pyautogui 和 pywinauto - 您可以发送任何文本或热键,而无需按下键盘设备。 - 如果您想与鼠标设备一起使用,您可以使用 AutoPythonLauncher 软件,您可以在屏幕上创建可点击的图像 - 观看此视频Click Here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-02
    • 1970-01-01
    • 1970-01-01
    • 2011-06-28
    • 2010-11-07
    • 1970-01-01
    • 2011-06-21
    • 1970-01-01
    相关资源
    最近更新 更多