在Python中将突出显示的文本复制到剪贴板

时间:2019-09-07 06:51:57

标签: python python-3.x pyautogui pyperclip

我是一名Python新手,试图弄清楚如何让Python复制程序被调用时突出显示的文本。

我已经查看了此线程中发布的解决方案:Copy highlighted text to clipboard, then use the clipboard to append it to a list

从理论上讲,一切都有意义,但问题是,当我运行程序时,似乎'pya.doubleClick(pya.position())'命令使我的重点脱了!如果我将光标悬停在文本上,则程序会成功突出显示给定的单词-但我需要能够复制整个短语!

我想要实现的是能够突出显示屏幕上的任何文本(包括整个短语,而不仅仅是特定单词),然后运行该程序,使突出显示的文本通过程序输入。

我曾预料到这会在文本突出显示时涉及到'ctrl'+'c'函数的某种自动化...但是我不知道要使它真正起作用。

我正在Windows 10上使用Python 3.7.4。

这是我上面链接的线程中作为解决方案提供的代码:

import pyautogui as pya
import pyperclip  # handy cross-platform clipboard text handler
import time

def copy_clipboard():
    pyperclip.copy("") # <- This prevents last copy replacing current copy of null.
    pya.hotkey('ctrl', 'c')
    time.sleep(.01)  # ctrl-c is usually very fast but your program may execute faster
    return pyperclip.paste()

# double clicks on a position of the cursor
pya.doubleClick(pya.position())

list = []
var = copy_clipboard()
list.append(var) 
print(list)

也许我真正的问题是,我不知道如何在不突出显示当时突出显示的文本的情况下使程序运行。此刻,为了调用程序,我使用了一种笨拙的方法来创建程序的快捷方式,然后在该快捷方式的“属性”选项卡中指定该快捷方式的热键。

2 个答案:

答案 0 :(得分:1)

也许您可以使用键盘模块监视热键,然后可以打开CMD控制台,输入命令python yourcode.py,或将文件名更改为yourcode.pyw,这样可以在没有Windows的后台进程中运行,双击点击该代码文件将非常有用。

键盘项目:https://github.com/boppreh/keyboard

请注意不要将list用作变量名,因为它是Python语言中的关键字。

以下代码在我的计算机上有效(win10,python3.7):

import pyautogui as pya
import pyperclip  # handy cross-platform clipboard text handler
import time
import keyboard

lst = []


def copy_clipboard():
    pyperclip.copy("")  # <- This prevents last copy replacing current copy of null.
    pya.hotkey('ctrl', 'c')
    time.sleep(.1)  # ctrl-c is usually very fast but your program may execute faster
    return pyperclip.paste()


def double_click_copy():
    # double clicks on a position of the cursor
    pya.doubleClick(pya.position())

    var = copy_clipboard()
    lst.append(var)
    print(lst)


keyboard.add_hotkey('ctrl+f9', double_click_copy) 
keyboard.wait()

答案 1 :(得分:0)

您需要等待一些时间才能切换到实际窗口。您已经导入了time。在点击过程之前,请使用.sleep

time.sleep(3)

因此,您的代码将如下所示:

...
def copy_clipboard():
    ...

time.sleep(3)
pya.doubleClick(pya.position())
...