나는 달성하고자하는 것을 상세하게 설명하기 위해 최선을 다할 것입니다.C#에서 시스템 클립 보드를 어떻게 백업하고 복원합니까?
내 C# 응용 프로그램에서 외부 응용 프로그램에 CTRL-C 복사 작업을 수행하기 위해 IntPtr 창 핸들과 함께 C#을 사용하고 있습니다. GET_TEXT를 사용하여 텍스트에 직접 액세스 할 수있는 방법이 없기 때문에이 작업을 수행해야했습니다. 그런 다음 응용 프로그램 내에서 해당 사본의 텍스트 내용을 사용하고 있습니다. 여기서 문제는 클립 보드를 덮어 썼다는 것입니다. 내가 할 수 있도록하고 싶습니다 무엇
은 다음과 같습니다
- 백업 내 자신 이외의 다른 응용 프로그램에서 설정 한 수있는 클립 보드의 원래 내용.
- 그런 다음 복사를 수행하고 값을 내 응용 프로그램에 저장하십시오.
- 그런 다음 사용자가 원래 클립 보드 데이터에 계속 액세스 할 수 있도록 클립 보드의 원래 내용을 복원하십시오.
private void GetClipboardText() { text = ""; IDataObject backupClipboad = Clipboard.GetDataObject(); KeyboardInput input = new KeyboardInput(this); input.Copy(dialogHandle); // Performs a CTRL-C (copy) operation IDataObject clipboard = Clipboard.GetDataObject(); if (clipboard.GetDataPresent(DataFormats.Text)) { // Retrieves the text from the clipboard text = clipboard.GetData(DataFormats.Text) as string; } if (backupClipboad != null) { Clipboard.SetDataObject(backupClipboad, true); // throws exception } }
나는 System.Windows.Clipboard 아닌 System.Windows.Forms.Clipboard을 사용하고 있습니다 :
이는 지금까지 시도 코드입니다. 그 이유는 CTRL-C를 수행했을 때 System.Windows.Forms의 Clipboard 클래스가 데이터를 반환하지 않았지만 시스템 클립 보드가 그랬기 때문입니다.
OpenClipboard, EmptyClipboard 및 CloseClipboard와 같은 저수준 user32 호출을 살펴 보았습니다.하지만이 방법을 사용하면 도움이 될 수 있기를 기대했지만 복원 할 때 COM 예외가 계속 발생합니다.
아마도 이것은 클립 보드를 제어하려는 응용 프로그램의 IntPtr 창 핸들을 예상하는 OpenClipboard 매개 변수와 관련이 있다고 생각했습니다. 내 응용 프로그램에는 GUI가 없다고 언급 한 이래로 이것이 도전 과제입니다. 나는 여기서 무엇을 통과해야할지 확신하지 못했습니다. 어쩌면 누군가 그걸 밝힐 수 있을까요?
클립 보드 클래스를 잘못 사용하고 있습니까? GUI가없는 응용 프로그램의 IntPtr 창 핸들을 얻는 명확한 방법이 있습니까? 누구든지 시스템 클립 보드를 백업하고 복원하는 더 좋은 방법을 알고 있습니까?
동일한 오류가 발생하여이 게시물을 발견했습니다. 그러나, 나는 Clipboard.GetDataObject(). SetData (myData)를 호출 할 때만이 오류가 발생합니다. Clipboard.SetDataObject (myData)를 호출하면 정상적으로 작동합니다. 이유가 뭐예요? 중요한 경우 내 응용 프로그램은 WPF 기반입니다. – newman