मैं अजगर से पाठ (विंडोज़) क्लिपबोर्ड से पाठ कैसे पढ़ूं?
मैं अजगर से पाठ (विंडोज़) क्लिपबोर्ड से पाठ कैसे पढ़ूं?
जवाबों:
आपने मॉड्यूल बुलाया का उपयोग कर सकते win32clipboard है, जो का हिस्सा है pywin32 ।
यहाँ एक उदाहरण है जो पहले क्लिपबोर्ड डेटा को सेट करता है फिर इसे प्राप्त करता है:
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
प्रलेखन से एक महत्वपूर्ण अनुस्मारक:
जब विंडो ने क्लिपबोर्ड की जांच करना या बदलना समाप्त कर दिया है, तो क्लीपबोर्ड को कॉल करके क्लिपबोर्ड को बंद करें। यह अन्य विंडो को क्लिपबोर्ड तक पहुंचने में सक्षम बनाता है। क्लोजबोर्ड को कॉल करने के बाद क्लिपबोर्ड पर ऑब्जेक्ट न रखें।
आप इसे आसानी से बिल्ट-इन मॉड्यूल Tkinter के माध्यम से प्राप्त कर सकते हैं जो मूल रूप से GUI लाइब्रेरी है। यह कोड OS से क्लिपबोर्ड सामग्री प्राप्त करने के लिए एक खाली विजेट बनाता है।
#from tkinter import Tk # Python 3
from Tkinter import Tk
Tk().clipboard_get()
tkinterबजाय होना चाहिए Tkinter। Othwise यह मेरे अजगर 3.7.3 64 बिट win10 पर काम नहीं किया।
मैंने win32 मॉड्यूल का उपयोग करने के लिए कई सुझाव देखे हैं, लेकिन टिंकर ने सबसे छोटा और सबसे आसान तरीका प्रदान किया है, जैसा कि मैंने इस पोस्ट में देखा है: मैं पायथन का उपयोग करके विंडोज पर क्लिपबोर्ड पर एक स्ट्रिंग की प्रतिलिपि कैसे बना सकता हूं?
इसके अलावा, टीकटर अजगर मानक पुस्तकालय में है।
यदि आप अतिरिक्त पैकेज स्थापित नहीं करना चाहते हैं, 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())
ऊपर दिया गया सबसे उत्कीर्ण उत्तर इस तरह से अजीब है कि यह केवल क्लिपबोर्ड को साफ करता है और फिर सामग्री प्राप्त करता है (जो तब खाली है)। एक क्लिपबोर्ड को साफ कर सकता है कि कुछ क्लिपबोर्ड सामग्री जैसे कि "तैयार पाठ" आपके सादे पाठ सामग्री को "कवर" नहीं करता है जिसे आप क्लिपबोर्ड में सहेजना चाहते हैं।
कोड का निम्नलिखित टुकड़ा क्लिपबोर्ड में रिक्त स्थान द्वारा सभी नई लाइनों को बदल देता है, फिर सभी दोहरे स्थानों को हटा देता है और अंत में क्लिपबोर्ड पर सामग्री को वापस बचाता है:
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()
मुझे पता चला कि यह अजगर से क्लिपबोर्ड तक पहुंचने का सबसे आसान तरीका था:
1) pyperclip स्थापित करें:
pip install pyperclip
2) उपयोग:
import pyperclip
s = pyperclip.paste()
pyperclip.copy(s)
# the type of s is string
Win10 64-बिट, पायथन 3.5 और पायथन 3.7.3 (64-बिट) पर परीक्षण किया गया। गैर- ASCII वर्णों के साथ भी काम करने लगता है। परीक्षण किए गए वर्णों में © ° © © α charactersåäö शामिल हैं
अजगर मानक पुस्तकालय यह करता है ...
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()
Win32all पैकेज से win32clipboard का प्रयास करें (यदि आप सक्रिय रूप से पायथन पर हैं तो यह स्थापित है)।
यहां देखें नमूना: http://code.activestate.com/recipes/474121/
मेरे सांत्वना कार्यक्रम के लिए ऊपर के टिंकर के साथ उत्तर मेरे लिए काफी काम नहीं आए क्योंकि डडस्ट्रॉय () ने हमेशा एक त्रुटि दी:
"ईवेंट" कमांड को लागू नहीं कर सकते: निष्पादित करते समय एप्लिकेशन नष्ट हो गया है ...
या .withdraw () का उपयोग करते समय कंसोल विंडो को फ़ोकस वापस नहीं मिला।
इसे हल करने के लिए आपको .destroy () से पहले .update () भी कॉल करना होगा। उदाहरण:
# Python 3
import tkinter
r = tkinter.Tk()
text = r.clipboard_get()
r.withdraw()
r.update()
r.destroy()
R.withdraw () फ्रेम को एक मिलिसेकंड के लिए दिखाने से रोकता है, और फिर यह कंसोल को फ़ोकस वापस देते हुए नष्ट हो जाएगा।
पायथन लाइब्रेरी क्लिपबोर्ड का उपयोग करें
इसके बस इस तरह इस्तेमाल किया:
import clipboard
clipboard.copy("this text is now in the clipboard")
print clipboard.paste()
from pyperclip import copy, paste।