मैं पायथन का उपयोग करके विंडोज पर क्लिपबोर्ड पर एक स्ट्रिंग की प्रतिलिपि कैसे बना सकता हूं?


193

मैं एक बुनियादी विंडोज एप्लिकेशन बनाने की कोशिश कर रहा हूं जो उपयोगकर्ता इनपुट से एक स्ट्रिंग बनाता है और फिर इसे क्लिपबोर्ड में जोड़ता है। मैं पायथन का उपयोग करके क्लिपबोर्ड में एक स्ट्रिंग की प्रतिलिपि कैसे बना सकता हूं?


4
इस सवाल से संबंधित ।
glglgl

jaraco.clipboard यह (भी) करता है: क्लिपबोर्ड.कॉपी (चर)
जिन्सव

इसके अलावा एक खिड़की को दिखाए बिना टिंकर का उपयोग करके क्लिपबोर्ड पर कॉपी करने से संबंधित प्रश्न के बारे में मेरा उत्तर देखें । इसमें एक पायथन फ़ंक्शन शामिल होता है जो टिंकर का उपयोग करके क्लिपबोर्ड टेक्स्ट को प्रतिस्थापित / वापस करता है।
एडवर्ड

जवाबों:


285

वास्तव में, pywin32और ctypesइस सरल कार्य के लिए एक ओवरकिल लगता है। Tkinterएक क्रॉस-प्लेटफ़ॉर्म GUI फ्रेमवर्क है, जो डिफ़ॉल्ट रूप से पायथन के साथ जहाज करता है और क्लिपबोर्ड एक्सेस करने के तरीकों के साथ-साथ अन्य शांत सामान भी है।

अगर आप सभी को सिस्टम क्लिपबोर्ड पर कुछ पाठ डालना है, तो यह ऐसा करेगा:

from Tkinter import Tk
r = Tk()
r.withdraw()
r.clipboard_clear()
r.clipboard_append('i can has clipboardz?')
r.update() # now it stays on the clipboard after the window is closed
r.destroy()

और यह सब, मंच-विशिष्ट तृतीय-पक्ष पुस्तकालयों के साथ गड़बड़ करने की कोई जरूरत नहीं है।

यदि आप पायथन 3 का उपयोग कर रहे हैं, तो TKinterसाथ बदलें tkinter


55
क्लिपबोर्ड की सामग्री प्राप्त करें: result = r.selection_get (चयन = "क्लिपबोर्ड")
MJ

34
@SurDin Tkinter को अजगर 3 में बदल दिया गया था, इसलिए यह निर्भर करता है कि आप किस संस्करण का उपयोग कर रहे हैं।
ईमानदार अबे

24
मेरे सभी ऐप इस फ़ंक्शन के साथ क्लिपबोर्ड की सामग्री को चिपकाने के बाद अनुत्तरदायी हो जाते हैं, अजीब तरह से, परिणाम ठीक काम करता है।
बार्टलोमिएज लेवांडोव्स्की 20

14
अगर मैं फोन नहीं करता तो यह काम करता है r.destroy()। एक बार जब मैं कॉल करता हूं, तो क्लिपबोर्ड खाली हो जाता है और Ctrl-V को दबाने से लक्ष्य ऐप फ्रीज हो सकता है। (OS: विंडोज 7 x64)
netvope

8
मेरे लिए यह अजगर 3.4 के लिए काम नहीं करता है, लेकिन यह अजगर 2.7 के लिए काम करता है (हाँ, टिंकर के बजाय टिंकर के साथ)
मैटी

79

मेरे पास समाधान नहीं था, बस एक समाधान था।

विंडोज विस्टा में एक इनबिल्ट कमांड clipहोती है, जो कमांड लाइन से कमांड के आउटपुट को लेती है और क्लिपबोर्ड में डालती है। उदाहरण के लिए, ipconfig | clip

इसलिए मैंने osमॉड्यूल के साथ एक फ़ंक्शन बनाया जो एक स्ट्रिंग लेता है और इनबिल्ट विंडोज समाधान का उपयोग करके इसे क्लिपबोर्ड पर जोड़ता है।

import os
def addToClipBoard(text):
    command = 'echo ' + text.strip() + '| clip'
    os.system(command)

# Example
addToClipBoard('penny lane')

# Penny Lane is now in your ears, eyes, and clipboard.

जैसा कि पहले टिप्पणियों में उल्लेख किया गया था, लेकिन इस दृष्टिकोण के लिए एक नकारात्मक पक्ष यह है कि echoकमांड स्वचालित रूप से आपके पाठ के अंत में एक नई पंक्ति जोड़ता है। इससे बचने के लिए आप कमांड के संशोधित संस्करण का उपयोग कर सकते हैं:

def addToClipBoard(text):
    command = 'echo | set /p nul=' + text.strip() + '| clip'
    os.system(command)

यदि आप Windows XP का उपयोग कर रहे हैं, तो यह सीधे कॉपी और Windows XP Pro के कमांड प्रॉम्प्ट से सीधे क्लिपबोर्ड पर पेस्ट करने के चरणों का पालन करेगा ।


20
क्या होता अगर textहोता है | calc.exe ?
विली बैलेंटिन

2
@WilliBallenthin फिर आपको इसे दोहरे उद्धरण चिह्नों में लपेटने की आवश्यकता है। लेकिन क्या होगा यदि यह दोहरे उद्धरण चिह्नों को स्वीकार करता है? फिर आपको दोहरे उद्धरण चिह्नों की आवश्यकता है। text with " quotes and | pipeहो जाता है "text with "" quotes and | pipe" इस 95 से अधिक उम्र के खिड़कियों के साथ सिस्टम पर समस्या हो सकती है हालांकि
ColBeseder

5
अत्यधिक असुरक्षित कार्य ... आपके क्लिपबोर्ड पर भेजी गई सामग्री अब एक प्रविष्टि वेक्टर है और इस तरह आपकी हमले की सतह बढ़ जाती है।
फिल एल।

2
मुझे नई कहानियों के लिए भी समर्थन की आवश्यकता है, इसलिए मैंने इसे उपयोग करने के लिए संशोधित किया type। मैं अपना पाठ फाइल करने के लिए लिखता हूं, और कमांड का उपयोग करता हूं type myfile.txt | clip
मिक्सोप्रोटेक्सी

1
हालांकि यह मेरे लिए सबसे अच्छा जवाब है, इसका एक मुद्दा है (पायथन 3.5, विंडोज 10); एक अनचाहे न्यूलाइन को हमेशा स्ट्रिंग के अंत में जोड़ा जाता है। इससे कैसे बचा जाए?
एमएमजे

42

आप विंडोज एपीआई में टैप करने के लिए ctypes का उपयोग भी कर सकते हैं और बड़े पैमाने पर pywin32 पैकेज से बच सकते हैं। यह वही है जो मैं उपयोग करता हूं (खराब शैली का बहाना है, लेकिन विचार यह है):

import ctypes

# Get required functions, strcpy..
strcpy = ctypes.cdll.msvcrt.strcpy
ocb = ctypes.windll.user32.OpenClipboard    # Basic clipboard functions
ecb = ctypes.windll.user32.EmptyClipboard
gcd = ctypes.windll.user32.GetClipboardData
scd = ctypes.windll.user32.SetClipboardData
ccb = ctypes.windll.user32.CloseClipboard
ga = ctypes.windll.kernel32.GlobalAlloc    # Global memory allocation
gl = ctypes.windll.kernel32.GlobalLock     # Global memory Locking
gul = ctypes.windll.kernel32.GlobalUnlock
GMEM_DDESHARE = 0x2000

def Get():
  ocb(None) # Open Clip, Default task

  pcontents = gcd(1) # 1 means CF_TEXT.. too lazy to get the token thingy...

  data = ctypes.c_char_p(pcontents).value

  #gul(pcontents) ?
  ccb()

  return data

def Paste(data):
  ocb(None) # Open Clip, Default task

  ecb()

  hCd = ga(GMEM_DDESHARE, len(bytes(data,"ascii")) + 1)

  pchData = gl(hCd)

  strcpy(ctypes.c_char_p(pchData), bytes(data, "ascii"))

  gul(hCd)

  scd(1, hCd)

  ccb()

5
अजगर 2.6 x64 में कम से कम, मैं बदलना पड़ा bytes(data,"ascii")करने के लिए bytes(data)। प्रश्न का उत्तर देने के लिए धन्यवाद, मैं pywin32 या tk या कई अन्य चीजों का उपयोग नहीं कर सकता और यह काम करता है।
पैट कॉरविन

1
कोई चिंता नहीं है, लेकिन ध्यान दें कि क्लिपबोर्ड से लौटा डेटा वास्तव में एक और एन्कोडिंग में है, मेरा मानना ​​है कि यह विंडोज सीपी -1252 है। यह कुछ हद तक एक साथ हैक किया गया था, लेकिन यदि आप सही एन्कोडिंग का उपयोग नहीं करते हैं, तो गैर-अस्की चरित्र एक त्रुटि को बढ़ाएगा या गलत तरीके से डिकोड करेगा।
kapace

परिवर्तनीय नामों को टिप्पणियों की आवश्यकता नहीं होनी चाहिए, और सब कुछ यूनिकोड का समर्थन करना चाहिए।
सेस टिम्मरमैन

bytes(data, "mbcs")डिफ़ॉल्ट डिफ़ॉल्ट एन्कोडिंग के साथ काम करेंगे। मुझे "másreas ç saod é í ó u* ü ö ï/"इसे क्लिपबोर्ड पर लोड करने की अनुमति दी और इसे सही ढंग से वापस पढ़ा।
mvbentes

1
mbcs का उपयोग करने से मुझे यह मिलता है: OSError: अपवाद: एक्सेस उल्लंघन लेखन 0x0000000000000000
Seaky Lone

35

आप पाइपरलिप - क्रॉस-प्लेटफॉर्म क्लिपबोर्ड मॉड्यूल का उपयोग कर सकते हैं । या ज़ेरॉक्स - समान मॉड्यूल, सिवाय विंडोज पर काम करने के लिए win32 पायथन मॉड्यूल की आवश्यकता होती है।


pyperclipविंडोज पर यूनिकोड नहीं करता है। win32clipboardकर देता है।
सेस टिम्मरमैन

13
मेरा pyperclipपैच स्वीकार कर लिया गया; c:\python34\Scripts\pip install --upgrade pyperclipयूनिकोड पाठ को संभालने के लिए।
सेस टिम्मरमैन

1
मुझे यह पता करने में थोड़ा समय लगा कि यह है pyperclip, नहीं paperclip। इसके अलावा, 2016 की तरह, यूनिकोड के पात्रों के साथ भी पाइपरलिप काम करता है। मैंने पात्रों का परीक्षण किया है © ° © © α 64åäö Win10 64-बिट पर काम करने के लिए, पायथन 3.5 और पाइपरलिप 1.5.27 के साथ।
np8

28

आप उत्कृष्ट पांडा का उपयोग कर सकते हैं, जिसमें एक क्लिपबोर्ड समर्थन है, लेकिन आपको डेटाफ़्रेम से गुजरने की आवश्यकता है।

import pandas as pd
df=pd.DataFrame(['Text to copy'])
df.to_clipboard(index=False,header=False)

3
+1। मुझे यह समाधान पसंद है। यह स्वीकृत टिंकर समाधान से भी सरल है। यदि आप पंडों को किसी भी तरह से आयात करते हैं, तो कोई अतिरिक्त उपरि नहीं है। यह सभी प्लेटफार्मों पर भी काम करता है। यह (ज्यादातर मामलों में) नए पैकेज को स्थापित करने की भी आवश्यकता नहीं होती है।
18

4
यह pyperclipवैसे भी उपयोग करता है, इसलिए बेहतर उपयोगpyperpclip
8b 08 बजे अधिकतम

1
ज्यादातर लोगों के लिए (यानी मुझे), pandasआसानी से उपलब्ध है, लेकिन import pyperclipकाम नहीं करता है। इसलिए मैं "बेहतर उपयोग pyperclip" से सहमत नहीं हूं।
डॉक्टर कोर

1
यदि आप केवल पांडा का उपयोग करने के लिए प्रतिबंधित हैं, तो आप सीधे पाइपरलिप का उपयोग कर सकते हैं import pandas.io.clipboard as pyperclipया इसे जो चाहें नाम दे सकते हैं। यही वह जगह है जहां यह pandasकम से कम बैठता है
डेविड कुलब्रेट

1
यह आपके द्वारा कॉपी की गई स्ट्रिंग में एक नई पंक्ति वर्ण जोड़ने के लिए लगता है
गिज़्स वैन ओर्ट

18

सबसे सरल तरीका पाइपरलिप के साथ है । अजगर 2 और 3 में काम करता है।

इस लाइब्रेरी को स्थापित करने के लिए, उपयोग करें:

pip install pyperclip

उदाहरण उपयोग:

import pyperclip

pyperclip.copy("your string")

यदि आप क्लिपबोर्ड की सामग्री प्राप्त करना चाहते हैं:

clipboard_content = pyperclip.paste()

3
और क्या pyperclipमॉड्यूल पायथन के साथ आता है? कौन से संस्करण? मैं इसे पायथन 2.7 में नहीं देखता ...
सैमबी

8
हाँ, एक उत्तर को छोड़ दें जो आसानी से 5 से कम लाइनों में समस्या को हल करता है; क्योंकि रेफ़रिंग जैसे छोटे विवरण अधिक महत्वपूर्ण हैं; मेरे दोस्त को ढेर करने का बेहतरीन उपयोग। मैं वैसे भी nitpickers के लिए संपादित करेंगे। आपके लिए युक्ति: ऐसे उत्तर देना जो बेकार हैं या जो समस्या का समाधान नहीं करते हैं; upvote उत्तर जो समस्या को हल करते हैं या कम से कम उपयोगी होते हैं और टिप्पणियों में एक सुझाव देते हैं ताकि डाउनवोटिंग के बजाय एक उपयोगी उत्तर को बेहतर बनाया जा सके।
मविज़

2
संदर्भ के बिना, आप कुछ भी नहीं हल करते हैं। लेकिन जब से आपने लिंक जोड़ा है, मैं उत्तर हटा दूंगा, क्योंकि उत्तर अब अच्छा है। मेरी बड़ी समस्या यह थी कि यह एक मानक पुस्तकालय आयात जैसा दिखता था; यह कोड की तरह लग रहा था जब आप कॉपी / पेस्ट नहीं कर सकते थे।
ग्लोवे

pyperclip.paste()छवियों के साथ काम नहीं करता है बस NoneTypeत्रुटि देता है। लेकिन दाहिने क्लिक के साथ काम करता है और फिर कॉपी किए गए परिणामों को चिपकाने के लिए अजगर का उपयोग करता है।
JayRizzo

11

मैंने विभिन्न समाधानों की कोशिश की है, लेकिन यह सबसे सरल है जो मेरा परीक्षण पास करता है :

#coding=utf-8

import win32clipboard  # http://sourceforge.net/projects/pywin32/

def copy(text):
    win32clipboard.OpenClipboard()
    win32clipboard.EmptyClipboard()
    win32clipboard.SetClipboardText(text, win32clipboard.CF_UNICODETEXT)
    win32clipboard.CloseClipboard()
def paste():
    win32clipboard.OpenClipboard()
    data = win32clipboard.GetClipboardData(win32clipboard.CF_UNICODETEXT)
    win32clipboard.CloseClipboard()
    return data

if __name__ == "__main__":  
    text = "Testing\nthe “clip—board”: 📋"
    try: text = text.decode('utf8')  # Python 2 needs decode to make a Unicode string.
    except AttributeError: pass
    print("%r" % text.encode('utf8'))
    copy(text)
    data = paste()
    print("%r" % data.encode('utf8'))
    print("OK" if text == data else "FAIL")

    try: print(data)
    except UnicodeEncodeError as er:
        print(er)
        print(data.encode('utf8'))

विंडोज 8.1 पर पायथन 3.4 में ठीक और विंडोज 7 पर पायथन 2.7 का परीक्षण किया गया। इसके अलावा यूनिक्स के साथ यूनिकोड डेटा को पढ़ने पर भी विंडोज से कॉपी किया गया। अजगर डेटा क्लिपबोर्ड पर रहता है जब पायथन बाहर निकलता है:"Testing the “clip—board”: 📋"

यदि आप कोई बाहरी निर्भरता नहीं चाहते हैं, तो इस कोड का उपयोग करें (अब क्रॉस-प्लेटफॉर्म का हिस्सा pyperclip- C:\Python34\Scripts\pip install --upgrade pyperclip):

def copy(text):
    GMEM_DDESHARE = 0x2000
    CF_UNICODETEXT = 13
    d = ctypes.windll # cdll expects 4 more bytes in user32.OpenClipboard(None)
    try:  # Python 2
        if not isinstance(text, unicode):
            text = text.decode('mbcs')
    except NameError:
        if not isinstance(text, str):
            text = text.decode('mbcs')
    d.user32.OpenClipboard(0)
    d.user32.EmptyClipboard()
    hCd = d.kernel32.GlobalAlloc(GMEM_DDESHARE, len(text.encode('utf-16-le')) + 2)
    pchData = d.kernel32.GlobalLock(hCd)
    ctypes.cdll.msvcrt.wcscpy(ctypes.c_wchar_p(pchData), text)
    d.kernel32.GlobalUnlock(hCd)
    d.user32.SetClipboardData(CF_UNICODETEXT, hCd)
    d.user32.CloseClipboard()

def paste():
    CF_UNICODETEXT = 13
    d = ctypes.windll
    d.user32.OpenClipboard(0)
    handle = d.user32.GetClipboardData(CF_UNICODETEXT)
    text = ctypes.c_wchar_p(handle).value
    d.user32.CloseClipboard()
    return text

कहां से मिलेगा win32clipboard? यह मेरे पायथन 2.7 का हिस्सा नहीं है। और के बजाय का pasteउपयोग क्यों करता CF_TEXTहै CF_UNICODETEXT?
मार्क रैनसम

@MarkRansom pywin32, और क्योंकि मेरे परीक्षण ने तब तक ठीक काम किया जब तक मैंने R का उपयोग करके इसे कठिन नहीं बना दिया। मैंने कोड अपडेट कर दिया है।
सेस टिम्मरमैन

11

किसी कारण से मैं कभी भी मेरे लिए काम करने के लिए Tk समाधान प्राप्त नहीं कर पाया। कपेस का समाधान बहुत अधिक व्यावहारिक है, लेकिन स्वरूपण मेरी शैली के विपरीत है और यह यूनिकोड के साथ काम नहीं करता है। यहाँ एक संशोधित संस्करण है।

import ctypes

OpenClipboard = ctypes.windll.user32.OpenClipboard
EmptyClipboard = ctypes.windll.user32.EmptyClipboard
GetClipboardData = ctypes.windll.user32.GetClipboardData
SetClipboardData = ctypes.windll.user32.SetClipboardData
CloseClipboard = ctypes.windll.user32.CloseClipboard
CF_UNICODETEXT = 13

GlobalAlloc = ctypes.windll.kernel32.GlobalAlloc
GlobalLock = ctypes.windll.kernel32.GlobalLock
GlobalUnlock = ctypes.windll.kernel32.GlobalUnlock
GlobalSize = ctypes.windll.kernel32.GlobalSize
GMEM_MOVEABLE = 0x0002
GMEM_ZEROINIT = 0x0040

unicode_type = type(u'')

def get():
    text = None
    OpenClipboard(None)
    handle = GetClipboardData(CF_UNICODETEXT)
    pcontents = GlobalLock(handle)
    size = GlobalSize(handle)
    if pcontents and size:
        raw_data = ctypes.create_string_buffer(size)
        ctypes.memmove(raw_data, pcontents, size)
        text = raw_data.raw.decode('utf-16le').rstrip(u'\0')
    GlobalUnlock(handle)
    CloseClipboard()
    return text

def put(s):
    if not isinstance(s, unicode_type):
        s = s.decode('mbcs')
    data = s.encode('utf-16le')
    OpenClipboard(None)
    EmptyClipboard()
    handle = GlobalAlloc(GMEM_MOVEABLE | GMEM_ZEROINIT, len(data) + 2)
    pcontents = GlobalLock(handle)
    ctypes.memmove(pcontents, data, len(data))
    GlobalUnlock(handle)
    SetClipboardData(CF_UNICODETEXT, handle)
    CloseClipboard()

paste = get
copy = put

इस उत्तर को पहली बार बनाए जाने के बाद से ऊपर बदल गया है, विस्तारित यूनिकोड वर्णों और पायथन 3 के साथ बेहतर तालमेल करने के लिए। इसे पायथन 2.7 और 3.5 दोनों में परीक्षण किया गया है, और इमोजी जैसे के साथ भी काम करता है \U0001f601 (😁)


@CeesTimmerman मैं क्यों परीक्षण करने के लिए एक विंडोज 8.1 प्रणाली है प्यार होता। मुझे आज बाद में जांच करने का मौका मिल सकता है। क्या आप वाकई क्लिपबोर्ड में पाठ हैं?
मार्क रैनसम

हाँ। मैंने पिछले तीन दिनों में अजगर में बड़े पैमाने पर क्लिपबोर्ड कोड का परीक्षण किया है।
सेस टिम्मरमैन

put()समारोह भी काम की जरूरत है; इमोजी "o" (\ U0001f400) को "(" (\ U0001f4cb), या "📋" के रूप में कॉपी किया जाता है। "📋" में बदल जाता है।
सेस टिम्मरमैन

@CeesTimmerman जो इसे समझाते हैं। आंतरिक यूनिकोड प्रतिनिधित्व बदल गया है, मुझे याद नहीं है कि यह 3.3 या 3.4 था। इसे ठीक करने के लिए UTF-16 को एक स्पष्ट एन्कोडिंग की आवश्यकता होगी। यह बग नहीं है।
मार्क रैनसम

1
@YngvarKristiansen आखिरकार उन बदलावों को करने के लिए तैयार हो गया। मुझे अब विश्वास है कि यह कोड पायथन के अधिकांश आधुनिक संस्करणों और हर संभव यूनिकोड चरित्र के लिए काम करता है।
मार्क रैनसम


5

आप मॉड्यूल का उपयोग कर सकते हैं clipboard। इसका सरल और बेहद आसान उपयोग है। मैक , विंडोज और लिनक्स के साथ काम करता है ।
नोट: इसका एक विकल्प हैpyperclip

स्थापित करने के बाद, इसे आयात करें:

import clipboard

तो आप इस तरह से कॉपी कर सकते हैं:

clipboard.copy("This is copied")

आप कॉपी किए गए पाठ को भी चिपका सकते हैं:

clipboard.paste()

2
यह सबसे अच्छा समाधान की तरह लगता है। क्लिपबोर्ड के साथ स्थापित किया जा सकता है pip install clipboard
vy32

5

यदि आप पंडों के आधार पर ठीक हैं, तो यहां सबसे आसान और विश्वसनीय तरीका मुझे मिल गया है। हालांकि मुझे नहीं लगता कि यह आधिकारिक रूप से पंडास एपीआई का हिस्सा है, इसलिए यह भविष्य के अपडेट के साथ टूट सकता है। यह 0.25.3 के रूप में काम करता है

from pandas.io.clipboard import copy 
copy("test")

3

विजेट में विधि भी होती .clipboard_get()है जो क्लिपबोर्ड की सामग्री को लौटाती है (जब तक कि क्लिपबोर्ड में डेटा के प्रकार के आधार पर किसी प्रकार की त्रुटि नहीं होती है)।

clipboard_get()विधि इस बग रिपोर्ट में बताया गया है:
http://bugs.python.org/issue14777

अजीब बात है, इस पद्धति का उल्लेख आम (लेकिन अनौपचारिक) ऑनलाइन TkInter प्रलेखन स्रोतों में नहीं किया गया था, जिन्हें मैं आमतौर पर संदर्भित करता हूं।


3

मुझे लगता है कि इसके लिए बहुत सरल उपाय है।

name = input('What is your name? ')
print('Hello %s' % (name) )

फिर कमांड लाइन में अपना प्रोग्राम चलाएं

अजगर का अभिवादन | क्लिप

यह आपकी फ़ाइल के आउटपुट को क्लिपबोर्ड पर पाइप करेगा


यह एक अच्छा समाधान है लेकिन मुझे लगता है कि अजगर का एक बहुत विकसित है और एक IDE में चलता है
जेसी रेज़ा

2

Ctypes का उपयोग करके मार्क रैंसम के जवाब के अलावा : यह (सभी?) X64 सिस्टम के लिए काम नहीं करता है क्योंकि हैंडल को int-size से छोटा किया जाना प्रतीत होता है। स्पष्ट रूप से आर्ग्स और रिटर्न मान को परिभाषित करने से इस समस्या पर काबू पाने में मदद मिलती है।

import ctypes
import ctypes.wintypes as w

CF_UNICODETEXT = 13

u32 = ctypes.WinDLL('user32')
k32 = ctypes.WinDLL('kernel32')

OpenClipboard = u32.OpenClipboard
OpenClipboard.argtypes = w.HWND,
OpenClipboard.restype = w.BOOL

GetClipboardData = u32.GetClipboardData
GetClipboardData.argtypes = w.UINT,
GetClipboardData.restype = w.HANDLE

EmptyClipboard = u32.EmptyClipboard
EmptyClipboard.restype = w.BOOL

SetClipboardData = u32.SetClipboardData
SetClipboardData.argtypes = w.UINT, w.HANDLE,
SetClipboardData.restype = w.HANDLE

CloseClipboard = u32.CloseClipboard
CloseClipboard.argtypes = None
CloseClipboard.restype = w.BOOL

GHND = 0x0042

GlobalAlloc = k32.GlobalAlloc
GlobalAlloc.argtypes = w.UINT, w.ctypes.c_size_t,
GlobalAlloc.restype = w.HGLOBAL

GlobalLock = k32.GlobalLock
GlobalLock.argtypes = w.HGLOBAL,
GlobalLock.restype = w.LPVOID

GlobalUnlock = k32.GlobalUnlock
GlobalUnlock.argtypes = w.HGLOBAL,
GlobalUnlock.restype = w.BOOL

GlobalSize = k32.GlobalSize
GlobalSize.argtypes = w.HGLOBAL,
GlobalSize.restype = w.ctypes.c_size_t

unicode_type = type(u'')

def get():
    text = None
    OpenClipboard(None)
    handle = GetClipboardData(CF_UNICODETEXT)
    pcontents = GlobalLock(handle)
    size = GlobalSize(handle)
    if pcontents and size:
        raw_data = ctypes.create_string_buffer(size)
        ctypes.memmove(raw_data, pcontents, size)
        text = raw_data.raw.decode('utf-16le').rstrip(u'\0')
    GlobalUnlock(handle)
    CloseClipboard()
    return text

def put(s):
    if not isinstance(s, unicode_type):
        s = s.decode('mbcs')
    data = s.encode('utf-16le')
    OpenClipboard(None)
    EmptyClipboard()
    handle = GlobalAlloc(GHND, len(data) + 2)
    pcontents = GlobalLock(handle)
    ctypes.memmove(pcontents, data, len(data))
    GlobalUnlock(handle)
    SetClipboardData(CF_UNICODETEXT, handle)
    CloseClipboard()

#Test run
paste = get
copy = put
copy("Hello World!")
print(paste())

0
import wx

def ctc(text):

    if not wx.TheClipboard.IsOpened():
        wx.TheClipboard.Open()
        data = wx.TextDataObject()
        data.SetText(text)
        wx.TheClipboard.SetData(data)
    wx.TheClipboard.Close()

ctc(text)

2
समस्या और समाधान का स्पष्टीकरण सहायक होगा।
शोदेव

एक क्लिपबोर्ड पर पाठ की प्रतिलिपि बनाने के लिए एक फ़ंक्शन। wx python लाइब्रेरी का उपयोग करके (मैंने टीके कभी नहीं सीखा) यहां पूछे गए सवाल का एक और समाधान।
jlk

समस्या / समाधान @jlk की अपनी व्याख्या को शामिल करने के लिए उत्तर को संपादित करने के लिए स्वतंत्र महसूस करें - ऐसा करने से आम तौर पर उत्तर अधिक उपयोगी हो जाते हैं। इसके अलावा, कोशिश करने के लिए धन्यवाद, लेकिन मुझे लगता है कि मूल पोस्टर में विशेष रूप से टीके के लिए पूछने का कुछ कारण था।
आईकेडवाटर

0

मेरे द्वारा यहां साझा की गई स्निपेट पाठ फ़ाइलों को प्रारूपित करने की क्षमता का लाभ उठाती है: यदि आप क्लिपबोर्ड पर एक जटिल आउटपुट को कॉपी करना चाहते हैं तो क्या होगा? (स्तंभ या किसी चीज़ की सूची में एक सुस्पष्ट सरणी कहें)

import subprocess
import os

def cp2clip(clist):

    #create a temporary file
    fi=open("thisTextfileShouldNotExist.txt","w")

    #write in the text file the way you want your data to be
    for m in clist:
        fi.write(m+"\n")

    #close the file
    fi.close()

    #send "clip < file" to the shell
    cmd="clip < thisTextfileShouldNotExist.txt"
    w = subprocess.check_call(cmd,shell=True)

    #delete the temporary text file
    os.remove("thisTextfileShouldNotExist.txt")

    return w

केवल खिड़कियों के लिए काम करता है, मुझे लगता है कि लिनक्स या मैक के लिए अनुकूलित किया जा सकता है। शायद थोड़ा जटिल ...

उदाहरण:

>>>cp2clip(["ET","phone","home"])
>>>0

किसी भी पाठ संपादक में Ctrl + V:

ET
phone
home

0

यह एटमाइज़र का बेहतर उत्तर है

उनके बीच देरी update()और 200 msदेरी के 2 कॉल नोट करें। क्लिपबोर्ड की अस्थिर स्थिति के कारण वे फ्रीजिंग अनुप्रयोगों की रक्षा करते हैं:

from Tkinter import Tk
import time     

r = Tk()
r.withdraw()
r.clipboard_clear()
r.clipboard_append('some string')

r.update()
time.sleep(.2)
r.update()

r.destroy()

0

अजगर की क्लिपबोर्ड लाइब्रेरी का उपयोग करें!

import clipboard as cp
cp.copy("abc")

क्लिपबोर्ड में अब 'एबीसी' है। हैप्पी पेस्टिंग!


0

मेरे सभी अजगर विन्यासों के लिए सभी उत्तरों ने काम नहीं किया है, इसलिए यह समाधान केवल सबप्रोसेस मॉड्यूल का उपयोग करता है। हालांकि, मैक के लिए या विंडोज के लिए copy_keywordहोना चाहिए :pbcopyclip

import subprocess
subprocess.run('copy_keyword', universal_newlines=True, input='New Clipboard Value 😀')

यहां कुछ और व्यापक कोड हैं जो स्वचालित रूप से जांचते हैं कि वर्तमान ऑपरेटिंग सिस्टम क्या है:

import platform
import subprocess

copy_string = 'New Clipboard Value 😀'

# Check which operating system is running to get the correct copying keyword.
if platform.system() == 'Darwin':
    copy_keyword = 'pbcopy'
elif platform.system() == 'Windows':
    copy_keyword = 'clip'

subprocess.run(copy_keyword, universal_newlines=True, input=copy_string)

जब आप उस स्ट्रिंग को चिपकाने की कोशिश करते हैं तो IDLE क्रैश हो जाता है।
मैक्स

@MaxDoesStuff इमोजी के बिना इसे आज़माएं। मुझे नहीं पता कि डिफ़ॉल्ट IDLE में काम क्यों नहीं होता है, लेकिन यह अन्य IDLE में काम करता है।
Fetchinator7

0

आप winclip32 मॉड्यूल का उपयोग कर सकते हैं! इंस्टॉल:

pip install winclip32

प्रतिलिपि बनाना:

import winclip32
winclip32.set_clipboard_data(winclip32.UNICODE_STD_TEXT, "some text")

लेना:

import winclip32
print(winclip32.get_clipboard_data(winclip32.UNICODE_STD_TEXT))

अधिक जानकारी के लिए: https://pypi.org/project/winclip32/


-1

क्लिपबोर्ड की प्रतिलिपि बनाने के लिए कोड स्निपेट:

एक क्लिपर पायथन कोड बनाएं, जिसका नाम मॉड्यूल है ( क्लिपबोर्डहोम ):

import clr
clr.AddReference('System.Windows.Forms')
from System.Windows.Forms import Clipboard
def setText(text):
    Clipboard.SetText(text)

def getText():
    return Clipboard.GetText()

फिर उपरोक्त मॉड्यूल को अपने कोड में आयात करें।

import io
import clipboard
code = clipboard.getText()
print code
code = "abcd"
clipboard.setText(code)

मुझे आयरनपाइथन में ब्लॉग पोस्ट क्लिपबोर्ड एक्सेस का श्रेय देना चाहिए ।


-2

आप यह कोशिश कर सकते हैं:

command = 'echo content |clip'
subprocess.check_call(command, shell=True)

-9
from Tkinter import Tk
clip = Tk()

हो सकता है कि आप रचनात्मक रूप से एक त्रुटि संदेश प्राप्त कर सकें और आपके द्वारा उपयोग किए जा रहे अजगर का संस्करण हो। मैंने जो 2 पंक्तियाँ लिखीं, वह अजगर के साथ काम करती हैं। शुक्रिया
टैगो

2
सवाल यह है कि "मैं पायथन का उपयोग करके विंडोज पर क्लिपबोर्ड पर एक स्ट्रिंग की प्रतिलिपि कैसे बना सकता हूं"। निश्चित रूप से यह दुर्घटना नहीं करता है, लेकिन यह इस सवाल में बिल्कुल संतुष्ट नहीं है कि यह वास्तव में कुछ भी नहीं
एंटिटी हवाला

2
प्रश्न: मैं पायथन का उपयोग करके विंडोज क्लिपबोर्ड पर एक स्ट्रिंग की प्रतिलिपि कैसे बना सकता हूं? A: GUI लाइब्रेरी आयात करें और रूट ऑब्जेक्ट बनाएं। । क्षमा करें, यह भी कहा गया प्रश्न का उत्तर कैसे देता है?
मार्टिन पीटर्स

python3 के साथ आप इन पंक्तियों के साथ कुछ कर सकते हैं: tkinter> tki = tkinter.Tk ()> tki.clipboard_clear () # वर्तमान क्लिपबोर्ड को साफ़ करें> मिस्ट्रीिंग = 'Hello World'> tki.clipboard_append (रहस्य)> tki.clipboard_get आयात करें ) आउट [१ ९]: 'हैलो वर्ल्ड'>
टैगो

2
फिर वह उत्तर दें। जैसा कि यह खड़ा है कि आपके पास वास्तव में यहाँ कुछ भी उपयोगी नहीं है। क्या आपने विंडोज पर परीक्षण किया है?
मार्टिन पीटर्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.