Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Copying highlighted text to clipboard in Python

I'm a Python newbie trying to work out how to have Python copy whatever text I have highlighted when the program is called.

I've looked at the solution posted in this thread: Copy highlighted text to clipboard, then use the clipboard to append it to a list

Everything there makes sense in theory but the problem is that when I run the program it seems that the 'pya.doubleClick(pya.position())' command gets rid of my highlight! If I leave my cursor hovering over the text then the program does successfully highlight a given word - but I need to be able to copy entire phrases!

What I want to achieve is to be able highlight any text on the screen (including whole phrases and not just particular words) and then run the program with the result that the highlighted text is fed through the program.

I had anticipated this would involve some kind of automation of the 'ctrl' + 'c' function while the text was highlighted... but I can't figure out to actually get this to work.

I'm using Python 3.7.4 on Windows 10.

This is the code which was presented as the solution in the thread that I linked above:

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)

Maybe my real issue is that I don't know how to get the program to run without getting rid of the highlight on whatever text is highlighted at the time. At the moment, in order to call the program I'm using the very clunky method of making a shortcut to my program and then specifying a hotkey to that shortcut in the 'properties' tab to that shortcut.

like image 671
Howtousernamepls Avatar asked Sep 02 '25 09:09

Howtousernamepls


1 Answers

Maybe you can use keyboard module to monitor hotkeys, then you can open CMD console ,enter command python yourcode.py, or change the file name to yourcode.pyw which can run in the background process without windows, double click the code file it will be useful.

keyboard project:https://github.com/boppreh/keyboard

Be careful not to use list as a variable name, because it is a keyword in Python language.

The following code is valid on my computer(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()
like image 173
bruce Avatar answered Sep 03 '25 22:09

bruce