পাইথন থেকে উইন্ডোজ ক্লিপবোর্ডের পাঠ্যটি কীভাবে পড়ব?
পাইথন থেকে উইন্ডোজ ক্লিপবোর্ডের পাঠ্যটি কীভাবে পড়ব?
উত্তর:
আপনি উইন 32 ক্লিপবোর্ড নামে মডিউলটি ব্যবহার করতে পারেন যা পাইউইন 32 এর অংশ ।
এখানে একটি উদাহরণ যা প্রথমে ক্লিপবোর্ডের ডেটা সেট করে তারপরে তা পায়:
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
ডকুমেন্টেশন থেকে একটি গুরুত্বপূর্ণ অনুস্মারক:
উইন্ডোটি ক্লিপবোর্ড পরীক্ষা বা পরিবর্তন করা শেষ করার পরে ক্লোজবোর্ডটি ক্লোজ ক্লিপবোর্ডে কল করে বন্ধ করুন। এটি অন্যান্য উইন্ডোগুলি ক্লিপবোর্ডে অ্যাক্সেস করতে সক্ষম করে। ক্লোজক্লিপবোর্ড কল করার পরে ক্লিপবোর্ডে কোনও বস্তু রাখবেন না।
আপনি সহজেই বিল্ট-ইন মডিউল টিনকিটারের মাধ্যমে এটি সম্পন্ন করতে পারবেন যা মূলত একটি জিইউআই লাইব্রেরি। এই কোডটি ওএস থেকে ক্লিপবোর্ড সামগ্রী পেতে একটি ফাঁকা উইজেট তৈরি করে।
#from tkinter import Tk # Python 3
from Tkinter import Tk
Tk().clipboard_get()
tkinter
পরিবর্তে হওয়া উচিত Tkinter
। পাশাপাশি এটি আমার অজগর 3.7.3 64 বিট উইন 10 এ কাজ করে নি।
আমি উইন 32 মডিউলটি ব্যবহার করার জন্য অনেক পরামর্শ দেখেছি, তবে এই পোস্টে যেমন টিন্টার আমি দেখেছেন তার সবচেয়ে সংক্ষিপ্ততম এবং সহজ পদ্ধতিটি সরবরাহ করে: উইন্ডোজের ক্লিপবোর্ডে পাইথন ব্যবহার করে আমি একটি স্ট্রিং কীভাবে অনুলিপি করব?
প্লাস, টিকিনটার পাইথন স্ট্যান্ডার্ড লাইব্রেরিতে রয়েছে।
আপনি যদি অতিরিক্ত প্যাকেজ ইনস্টল করতে না চান 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())
আমি খুঁজে পাই যে পাইথন থেকে ক্লিপবোর্ডে অ্যাক্সেস পাওয়ার সবচেয়ে সহজ উপায়:
1) পাইপক্র্লিপ ইনস্টল করুন:
pip install pyperclip
2) ব্যবহার:
import pyperclip
s = pyperclip.paste()
pyperclip.copy(s)
# the type of s is string
উইন 10 64-বিট, পাইথন 3.5 এবং পাইথন 3.7.3 (-৪-বিট) পরীক্ষিত। অ-এসসিআইআই অক্ষরগুলির সাথেও কাজ করে বলে মনে হচ্ছে। পরীক্ষিত অক্ষরগুলির মধ্যে ± ° ©© αβγθΔΨΦåäö অন্তর্ভুক্ত αβγθΔΨΦåäö
উপরের সর্বাধিক উত্সাহিত উত্তরটি এমনভাবে অদ্ভুত যে এটি কেবল ক্লিপবোর্ড সাফ করে এবং তারপরে সামগ্রীটি (যা পরে খালি হয়) পায়। আপনি ক্লিপবোর্ডে সংরক্ষণ করতে চান এমন "সরু পাঠ্য সামগ্রী" এর মতো কিছু ক্লিপবোর্ডের সামগ্রী ধরণের "আবরণ" দেয় না তা নিশ্চিত হতে কেউ ক্লিপবোর্ডটি সাফ করতে পারে।
নিম্নলিখিত কোডের টুকরোটি ক্লিপবোর্ডের সমস্ত নতুনলাইনগুলি স্পেস দ্বারা প্রতিস্থাপিত করে, তারপরে সমস্ত ডাবল স্পেসগুলি সরিয়ে দেয় এবং অবশেষে সামগ্রীটি ক্লিপবোর্ডে ফিরে যায়:
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()
পাইথন স্ট্যান্ডার্ড লাইব্রেরি এটি করে ...
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()
পাইথনস লাইব্রেরি ক্লিপবোর্ড ব্যবহার করুন
এটি কেবল এর মতো ব্যবহৃত হয়:
import clipboard
clipboard.copy("this text is now in the clipboard")
print clipboard.paste()
from pyperclip import copy, paste
।
clipboard
এটি একটি ভাল নাম। পাইথন স্ট্যান্ডার্ড লাইব্রেরিতে এই ফাংশনটি অন্তর্ভুক্ত করা উচিত।
উইন 32 সমস্ত প্যাকেজ থেকে উইন 32 ক্লিপবোর্ড ব্যবহার করে দেখুন (এটি যদি আপনি অ্যাক্টিভেট স্টাইথে থাকেন তবে সম্ভবত এটি ইনস্টল করা আছে)।
নমুনাটি এখানে দেখুন: http://code.activestate.com/recips/474121/
আমার কনসোল প্রোগ্রামের জন্য উপরের টিন্টারের সাথে উত্তরগুলি আমার পক্ষে যথেষ্ট কার্যকর হয়নি কারণ .ডাস্ট্রয়ে () সর্বদা ত্রুটি দেয় ,:
"ইভেন্ট" কমান্ডটি প্রার্থনা করতে পারে না: কার্যকর করার সময় অ্যাপ্লিকেশনটি ধ্বংস হয়ে গেছে ...
অথবা .withdraw () ব্যবহার করার সময় কনসোল উইন্ডোটি ফোকাসটি ফিরে পেল না।
এটি সমাধান করার জন্য আপনাকে .destroy () এর আগে .update () কল করতে হবে। উদাহরণ:
# Python 3
import tkinter
r = tkinter.Tk()
text = r.clipboard_get()
r.withdraw()
r.update()
r.destroy()
R.withdraw () ফ্রেমটি এক মিলিসেকেন্ডের জন্য প্রদর্শন করতে বাধা দেয় এবং তারপরে এটি কনসোলে ফোকাসটি ফিরিয়ে দেওয়া ধ্বংস হয়ে যাবে।