Bagaimana cara membaca teks dari clipboard (windows) dari python?
Jawaban:
Anda dapat menggunakan modul bernama win32clipboard , yang merupakan bagian dari pywin32 .
Berikut adalah contoh yang pertama-tama menyetel data papan klip lalu mendapatkannya:
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
Pengingat penting dari dokumentasi:
Ketika jendela selesai memeriksa atau mengubah clipboard, tutup clipboard dengan memanggil CloseClipboard. Ini memungkinkan jendela lain untuk mengakses papan klip. Jangan letakkan objek di clipboard setelah memanggil CloseClipboard.
Anda dapat dengan mudah menyelesaikan ini melalui modul Tkinter bawaan yang pada dasarnya merupakan pustaka GUI. Kode ini membuat widget kosong untuk mendapatkan konten clipboard dari OS.
#from tkinter import Tk # Python 3
from Tkinter import Tk
Tk().clipboard_get()
tkinter
bukan Tkinter
. Jika tidak, itu tidak berfungsi pada python 3.7.3 64bit win10 saya.
Saya telah melihat banyak saran untuk menggunakan modul win32, tetapi Tkinter menyediakan metode terpendek dan termudah yang pernah saya lihat, seperti dalam posting ini: Bagaimana cara menyalin string ke clipboard di Windows menggunakan Python?
Plus, Tkinter ada di pustaka standar python.
Jika Anda tidak ingin menginstal paket tambahan, ctypes
dapat menyelesaikan pekerjaan juga.
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())
Saya menemukan ini adalah cara termudah untuk mendapatkan akses ke clipboard dari python:
1) Pasang pyperclip:
pip install pyperclip
2) Penggunaan:
import pyperclip
s = pyperclip.paste()
pyperclip.copy(s)
# the type of s is string
Diuji pada Win10 64-bit, Python 3.5 dan Python 3.7.3 (64-bit). Sepertinya bekerja dengan karakter non-ASCII juga. Karakter yang diuji meliputi ± ° © © αβγθΔΨΦåäö
Jawaban yang paling banyak mendapat suara positif di atas adalah aneh karena ia hanya membersihkan Clipboard dan kemudian mendapatkan kontennya (yang kemudian kosong). Seseorang dapat menghapus papan klip untuk memastikan bahwa beberapa jenis konten papan klip seperti "teks berformat" tidak "menutupi" konten teks biasa yang ingin Anda simpan di papan klip.
Bagian kode berikut mengganti semua baris baru di papan klip dengan spasi, lalu menghapus semua spasi ganda dan terakhir menyimpan konten kembali ke papan klip:
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()
Pustaka standar python melakukannya ...
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()
from pyperclip import copy, paste
.
clipboard
adalah nama yang lebih baik. Fungsi ini harus dimasukkan dalam pustaka standar Python.
Coba win32clipboard dari paket win32all (yang mungkin diinstal jika Anda menggunakan ActiveState Python).
Lihat contoh di sini: http://code.activestate.com/recipes/474121/
Untuk program konsol saya , jawaban dengan tkinter di atas tidak cukup berhasil untuk saya karena .destroy () selalu memberikan kesalahan ,:
tidak dapat menjalankan perintah "event": aplikasi telah dihancurkan saat menjalankan ...
atau saat menggunakan .withdraw () jendela konsol tidak mendapatkan fokus kembali.
Untuk mengatasi ini, Anda juga harus memanggil .update () sebelum .destroy (). Contoh:
# Python 3
import tkinter
r = tkinter.Tk()
text = r.clipboard_get()
r.withdraw()
r.update()
r.destroy()
R.withdraw () mencegah frame ditampilkan selama satu milidetik, dan kemudian akan dihancurkan dengan mengembalikan fokus ke konsol.