programing

Python에서 Windows 클립보드에서 텍스트를 읽는 방법은 무엇입니까?

css3 2023. 4. 10. 22:05

Python에서 Windows 클립보드에서 텍스트를 읽는 방법은 무엇입니까?

파이썬을 사용하여 (윈도우) 클립보드에서 텍스트를 읽는 방법은 무엇입니까?

pywin32의 일부인 win32clipboard라는 모듈을 사용할 수 있습니다.

다음은 클립보드 데이터를 먼저 설정한 후 가져오는 예제입니다.

import win32clipboard

# set clipboard data
win32clipboard.OpenClipboard()
win32clipboard.EmptyClipboard()
win32clipboard.SetClipboardText('testing 123')
win32clipboard.CloseClipboard()

# get clipboard data
win32clipboard.OpenClipboard()
data = win32clipboard.GetClipboardData()
win32clipboard.CloseClipboard()
print data

설명서에서 중요한 주의사항:

창이 클립보드 검사 또는 변경을 마치면 CloseClipboard를 호출하여 클립보드를 닫습니다.그러면 다른 창에서 클립보드에 액세스할 수 있습니다.CloseClipboard를 호출한 후 클립보드에 개체를 배치하지 마십시오.

기본적으로 GUI 라이브러리인 빌트인 모듈 Tkinter를 통해 쉽게 실행할 수 있습니다.이 코드는 OS에서 클립보드 콘텐츠를 가져오는 빈 위젯을 만듭니다.

from tkinter import Tk  # Python 3
#from Tkinter import Tk # for Python 2.x
Tk().clipboard_get()

pyperclip이 python에서 클립보드에 접근하는 가장 쉬운 방법이라는 것을 알게 되었습니다.

  1. pyperclip 설치:pip install pyperclip

  2. 사용방법:

import pyperclip
    
s = pyperclip.paste()
pyperclip.copy(s)
    
# the type of s is string

는 Windows, Linux 및 Mac을 지원하며 ASC 이외에서 동작하는 것 같습니다.II 캐릭터도.테스트 대상 문자에는 ±°©가 포함됩니다.©αβααö

추가 패키지를 설치하지 않으려면ctypes그 일을 해낼 수 있다.

import ctypes

CF_TEXT = 1

kernel32 = ctypes.windll.kernel32
kernel32.GlobalLock.argtypes = [ctypes.c_void_p]
kernel32.GlobalLock.restype = ctypes.c_void_p
kernel32.GlobalUnlock.argtypes = [ctypes.c_void_p]
user32 = ctypes.windll.user32
user32.GetClipboardData.restype = ctypes.c_void_p

def get_clipboard_text():
    user32.OpenClipboard(0)
    try:
        if user32.IsClipboardFormatAvailable(CF_TEXT):
            data = user32.GetClipboardData(CF_TEXT)
            data_locked = kernel32.GlobalLock(data)
            text = ctypes.c_char_p(data_locked)
            value = text.value
            kernel32.GlobalUnlock(data_locked)
            return value
    finally:
        user32.CloseClipboard()

print(get_clipboard_text())

win32 모듈을 사용하는 방법은 여러 가지가 있습니다만, Tkinter는 지금까지 본 것 중 가장 짧고 쉬운 방법을 제공하고 있습니다.Python을 사용하여 Windows의 클립보드에 문자열을 복사하려면 어떻게 해야 합니까?

게다가 Tkinter는 python 표준 라이브러리에 있습니다.

위에서 가장 많이 투표된 답변은 클립보드를 지우고 내용을 얻는다는 점에서 이상합니다."형식 텍스트"와 같은 일부 클립보드 내용 유형이 클립보드에 저장할 일반 텍스트 내용을 "덮지" 않도록 클립보드를 지울 수 있습니다.

다음 코드 조각은 클립보드의 모든 줄바꿈을 공백으로 바꾼 다음 이중 공백을 모두 제거하고 내용을 클립보드에 다시 저장합니다.

import win32clipboard

win32clipboard.OpenClipboard()
c = win32clipboard.GetClipboardData()
win32clipboard.EmptyClipboard()
c = c.replace('\n', ' ')
c = c.replace('\r', ' ')
while c.find('  ') != -1:
    c = c.replace('  ', ' ')
win32clipboard.SetClipboardText(c)
win32clipboard.CloseClipboard()

python 표준 라이브러리가...

try:
    # Python3
    import tkinter as tk
except ImportError:
    # Python2
    import Tkinter as tk

def getClipboardText():
    root = tk.Tk()
    # keep the window from showing
    root.withdraw()
    return root.clipboard_get()

콘솔 프로그램에서는 위의 tkinter에 의한 응답은 효과가 없었습니다.왜냐하면 .destroy()는 항상 다음과 같은 에러를 나타내기 때문입니다.

"event" 명령을 호출할 수 없습니다. 실행 중 응용 프로그램이 삭제되었습니다...

또는 .flash()를 사용했을 때 콘솔창이 포커스를 되돌리지 않았습니다.

이 문제를 해결하려면 .destroy() 앞에 .update()를 호출해야 합니다.예:

# Python 3
import tkinter

r = tkinter.Tk()
text = r.clipboard_get()
r.withdraw()
r.update()
r.destroy()

r.withdraw()를 사용하면 프레임이 밀리초 동안 표시되지 않게 됩니다.그러면 프레임이 파기되어 콘솔로 포커스가 돌아갑니다.

Pythons 라이브러리 클립보드

용도는 다음과 같습니다.

import clipboard
clipboard.copy("this text is now in the clipboard")
print clipboard.paste()  

win32all 패키지에서 win32clipboard를 사용해 보십시오(ActiveState Python에 있는 경우 설치될 수 있습니다).

샘플은 이쪽 http://code.activestate.com/recipes/474121/을 참조해 주세요.

import pandas as pd
df = pd.read_clipboard()

꼬박 12년이 지난 후, 제게 솔루션이 생겼고, 당신은 패키지를 설치하지 않고도 그것을 사용할 수 있습니다.

from tkinter import Tk, TclError
from time import sleep

while True:
    try:
        clipboard = Tk().clipboard_get()
        print(clipboard)
        sleep(5)
    except TclError:
        print("Clipboard is empty.")
        sleep(5)

그다지 직접적인 요령은 아닙니다.

pyautogui 단축키 사용:

Import pyautogui
pyautogui.hotkey('ctrl', 'v')

따라서 클립보드 데이터를 원하는 대로 붙여넣을 수 있습니다.

파워셸에 전화해 보는 게 어때?

import subprocess

def getClipboard():
    ret = subprocess.getoutput("powershell.exe -Command Get-Clipboard")
    return ret

아나콘다 사용자: 배포판에는 파이퍼클립이 포함되어 있지 않지만, 파이퍼클립을 재배포하는 판다도 포함되어 있습니다.

>>> from pandas.io.clipboard import clipboard_get, clipboard_set
>>> clipboard_get()
'from pandas.io.clipboard import clipboard_get, clipboard_set'
>>> clipboard_set("Hello clipboard!")
>>> clipboard_get()
'Hello clipboard!'

pywin32(유통에도 포함되어 있음)보다 사용하기 쉽다고 생각합니다.

언급URL : https://stackoverflow.com/questions/101128/how-do-i-read-text-from-the-windows-clipboard-in-python