C # में क्लिपबोर्ड पर डेटा कॉपी कैसे करें


439

मैं C # में सिस्टम क्लिपबोर्ड पर एक स्ट्रिंग (उदाहरण के लिए "हैलो") की प्रतिलिपि कैसे बना सकता हूं, इसलिए अगली बार जब मैं दबाऊंगा तो CTRL+Vमुझे "हैलो" मिलेगा?


जवाबों:


798

दो वर्ग हैं जो विभिन्न विधानसभाओं और विभिन्न नामस्थानों में रहते हैं।

  • WinForms: निम्नलिखित नामस्थान घोषणा का उपयोग करें, सुनिश्चित करें कि विशेषता Mainके साथ चिह्नित किया गया [STAThread]है:

    using System.Windows.Forms;
  • WPF: निम्नलिखित नामस्थान घोषणा का उपयोग करें

    using System.Windows;
  • कंसोल: संदर्भ जोड़ें System.Windows.Forms, नाम स्थान घोषणा के बाद उपयोग करें, सुनिश्चित करें कि विशेषता Mainके साथ चिह्नित [STAThread]है। दूसरे उत्तर में चरण-दर-चरण मार्गदर्शिका

    using System.Windows.Forms;

एक सटीक स्ट्रिंग की प्रतिलिपि बनाने के लिए (इस मामले में शाब्दिक):

Clipboard.SetText("Hello, clipboard");

टेक्स्टबॉक्स की सामग्री को कॉपी करने के लिए या तो TextBox.Copy () का उपयोग करें या पहले टेक्स्ट प्राप्त करें और फिर क्लिपबोर्ड मान सेट करें:

Clipboard.SetText(txtClipboard.Text);

एक उदाहरण के लिए यहाँ देखें । या ... आधिकारिक MSDN प्रलेखन या WPF के लिए यहाँ


टिप्पणियों:


@KierenJohnstone क्या कुंजी-मूल्य वाले युग्मों का उपयोग करके क्लिपबोर्ड सामग्री तक पहुंचना संभव है?
अब्दुल

@ अब्दुल - मुझे यकीन नहीं है कि आपका क्या मतलब है। क्लिपबोर्ड सामग्री पाठ, फाइलें, चित्र, किसी भी प्रकार के कस्टम डेटा हो सकते हैं। Kv- जोड़े की अवधारणा क्लिपबोर्ड विचार के साथ कुछ भी नहीं लगती है?
कीरेन जॉनस्टोन

@KierenJohnstone मैं जो बनाने का प्रयास कर रहा हूं वह कुछ ऐसा है जिसमें एक उपयोगकर्ता क्लिपबोर्ड में कई चीजें संग्रहीत कर सकता है। उन चीजों को एक कुंजी द्वारा एक्सेस किया जाएगा। यह HTML5 लोकल स्टोरेज के समान है। या ऐसा कुछ है जो क्लिपबोर्ड की प्रकृति के कारण संभव नहीं है?
अब्दुल

यदि आप ASP.NET के साथ त्रुटि प्राप्त कर रहे हैं, तो एक नए थ्रेड में उपयोग करने का प्रयास करें: var थ्रेड = नया थ्रेड (param => {Clipboard.SetText (txtName.Text);}); thread.SetApartmentState (ApartmentState.STA); thread.Start ();
user3790692

1
skia.heliou के उत्तर ने मेरी मदद की: विशेषता जोड़ने के बाद [STAThreadAttribute], मेरा क्लिपबोर्ड।
SetText

44

चरण-दर-चरण फैशन में कंसोल प्रोजेक्ट के लिए , आपको पहले System.Windows.Formsसंदर्भ जोड़ना होगा । .NET 4.5 के साथ Visual Studio समुदाय 2013 में निम्न चरण काम करते हैं:

  1. में समाधान एक्सप्लोरर , अपने कंसोल परियोजना का विस्तार करें।
  2. संदर्भ राइट-क्लिक करें , फिर संदर्भ जोड़ें पर क्लिक करें ...
  3. में सभाओं समूह, के तहत फ्रेमवर्क , का चयन System.Windows.Forms
  4. ओके पर क्लिक करें ।

फिर, usingअपने कोड के शीर्ष पर दूसरों के साथ निम्नलिखित कथन जोड़ें :

using System.Windows.Forms;

फिर, निम्न में से कोई भी जोड़ें ClipboardSetTextआपके कोड के कथन:

Clipboard.SetText("hello");
// OR
Clipboard.SetText(helloString);

और अंत में, STAThreadAttributeअपनी Mainविधि में निम्नानुसार जोड़ें System.Threading.ThreadStateException:

[STAThreadAttribute]
static void Main(string[] args)
{
  // ...
}

1
वर्ग StackOverflowExceptionतुरंत STAThreadAttribute.NET फ्रेमवर्क सिस्टम क्लास लाइब्रेरी =) में स्थित है
skia.heliou

42

WPF C # क्लिपबोर्ड का उपयोग करके इस मुद्दे के साथ मेरा अनुभव और System.Threading.ThreadStateExceptionयहां मेरे कोड के साथ है जो सभी ब्राउज़रों के साथ सही ढंग से काम करता है:

Thread thread = new Thread(() => Clipboard.SetText("String to be copied to clipboard"));
thread.SetApartmentState(ApartmentState.STA); //Set the thread to STA
thread.Start(); 
thread.Join();

इस पोस्ट का श्रेय यहाँ

लेकिन यह केवल लोकलहोस्ट पर काम करता है, इसलिए सर्वर पर इसे आजमाएं नहीं, क्योंकि यह काम नहीं करने वाला है।

सर्वर-साइड पर, मैंने इसका उपयोग करके किया zeroclipboard। एकमात्र तरीका, बहुत शोध के बाद।


मैंने इसे स्वचालित सेलेनियम परीक्षण (वेबड्राइवर) में इस्तेमाल किया और यह बहुत अच्छा काम करता है!
andrew.fox

@ andrew.fox आपने इसे अपने सर्वर - क्लाइंट मॉडल पर आज़माया है? क्योंकि अगर यह 2 अलग मशीनों है मुझे लगता है कि यह काम नहीं करना चाहिए।
बीएमएक्सिमस

Lol no, Selenium एजेंट मशीन पर ब्राउज़र विंडो खोलता है।
andrew.fox

41
Clipboard.SetText("hello");

आपको इसके लिए System.Windows.Formsया System.Windowsनामस्थान का उपयोग करने की आवश्यकता होगी ।


1

Clip.exe क्लिपबोर्ड को सेट करने के लिए Windows में एक निष्पादन योग्य है। ध्यान दें कि यह विंडोज के अलावा अन्य ऑपरेटिंग सिस्टम के लिए काम नहीं करता है , जो अभी भी बेकार है।

        /// <summary>
        /// Sets clipboard to value.
        /// </summary>
        /// <param name="value">String to set the clipboard to.</param>
        public static void SetClipboard(string value)
        {
            if (value == null)
                throw new ArgumentNullException("Attempt to set clipboard with null");

            Process clipboardExecutable = new Process(); 
            clipboardExecutable.StartInfo = new ProcessStartInfo // Creates the process
            {
                RedirectStandardInput = true,
                FileName = @"clip", 
            };
            clipboardExecutable.Start();

            clipboardExecutable.StandardInput.Write(value); // CLIP uses STDIN as input.
            // When we are done writing all the string, close it so clip doesn't wait and get stuck
            clipboardExecutable.StandardInput.Close(); 

            return;
        }
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.