[C#] C #에서 클립 보드에 데이터를 복사하는 방법

C #의 시스템 클립 보드에 문자열 (예 : “hello”)을 복사하는 방법은 다음에 누를 CTRL+V때 “hello”가 표시됩니까?



답변

다른 어셈블리와 다른 네임 스페이스에있는 두 개의 클래스가 있습니다.

  • 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 .


비고 :


답변

들어 콘솔 단계별 방식으로 프로젝트를 먼저 추가해야 System.Windows.Forms참조. 다음 단계는 Visual Studio Community 2013 with .NET 4.5에서 작동합니다.

  1. 에서 솔루션 탐색기 , 콘솔 프로젝트를 확장합니다.
  2. 참조를 마우스 오른쪽 단추로 클릭 한 후 참조 추가 … 를 클릭 하십시오.
  3. 에서 어셈블리 그룹에서 프레임 워크 를 선택합니다 System.Windows.Forms.
  4. 확인을 클릭하십시오 .

그런 다음 using코드 맨 위에 다른 명령문과 함께 다음 명령문을 추가하십시오 .

using System.Windows.Forms;

그런 다음 다음 중 하나를 추가하십시오 Clipboard. SetText코드에 대한 진술 :

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

마지막 으로 다음과 같이 메소드에 추가 STAThreadAttribute하여 :MainSystem.Threading.ThreadStateException

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


답변

클립 보드에 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();

이 게시물에 대한 크레딧 여기

그러나 이것은 localhost에서만 작동하므로 서버에서는 작동하지 않으므로 시도하지 마십시오.

서버 측에서는을 사용하여 수행했습니다 zeroclipboard. 많은 연구 끝에 유일한 방법.


답변

Clipboard.SetText("hello");

이를 위해 System.Windows.Forms또는 System.Windows네임 스페이스 를 사용해야합니다 .


답변

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;
        }


답변