Python中将高亮文本复制到剪贴板

4
我是一个Python新手,正在尝试弄清楚如何让Python在调用程序时复制我所突出显示的任何文本。
我查看了此线程中发布的解决方案:将突出显示的文本复制到剪贴板,然后使用剪贴板将其附加到列表
理论上,那里的所有内容都很有道理,但问题是当我运行程序时,似乎“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)


也许我的真正问题是我不知道如何在不取消当前高亮文本的情况下运行程序。目前,为了调用程序,我使用非常笨重的方法,即创建一个指向程序的快捷方式,然后在“属性”选项卡中为该快捷方式指定热键。

你的意思是,如果你打开一个页面,你想要复制页面上的所有文本吗?还是你想选择整个句子? - Nouman
我假设我已经选择了文本并将其突出显示在屏幕上。然后,我希望Python将该文本复制到剪贴板中。 - Howtousernamepls
我遇到的问题是运行程序的时候似乎取消了文本的高亮显示,因此我想要复制的文本没有被复制。 - Howtousernamepls
2个回答

2
也许您可以使用键盘模块监视热键,然后打开CMD控制台,输入命令python yourcode.py,或将文件名更改为yourcode.pyw,该文件可以在后台进程中运行而不需要windows,双击代码文件它会很有用。
keyboard项目:https://github.com/boppreh/keyboard 注意不要使用列表作为变量名称,因为它是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()

0

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

time.sleep(3)

所以,你的代码将会是这样:

...
def copy_clipboard():
    ...

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接