Ich werde mein Bestes tun, um im Detail zu erklären, was ich zu erreichen versuche.Wie kann ich die Systemzwischenablage in C# sichern und wiederherstellen?
Ich verwende C# mit IntPtr-Fenster-Handles, um eine CTRL-C-Kopieroperation für eine externe Anwendung aus meiner eigenen C# -Anwendung durchzuführen. Ich musste dies tun, weil es keine Möglichkeit gab, mit GET_TEXT direkt auf den Text zuzugreifen. Ich verwende dann den Textinhalt dieser Kopie in meiner Anwendung. Das Problem hier ist, dass ich jetzt die Zwischenablage überschrieben habe.
Was ich möchte in der Lage sein zu tun ist:
- Sicherung der ursprüngliche Inhalt der Zwischenablage, die von jeder Anwendung anders als meine eigene gesetzt worden sein könnte.
- Dann führen Sie die Kopie und speichern Sie den Wert in meiner Anwendung.
- Anschließend den ursprünglichen Inhalt der Zwischenablage wiederherstellen, damit der Benutzer weiterhin Zugriff auf seine ursprünglichen Daten in der Zwischenablage hat.
Dies ist der Code, den ich bisher versucht habe:
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
}
}
ich die System.Windows.Clipboard verwenden und nicht die System.Windows.Forms.Clipboard. Der Grund dafür war, dass, als ich die STRG-C ausführte, die Clipboard-Klasse von System.Windows.Forms keine Daten zurückgab, sondern die Systemzwischenablage.
Ich schaute in einige der Low-Level-Benutzer32 Anrufe wie OpenClipboard, EmptyClipboard und CloseClipboard in der Hoffnung, dass sie mir helfen würde dies zu tun, aber bisher bekomme ich COM-Ausnahmen beim Versuch, wiederherzustellen.
Ich dachte, dass dies vielleicht mit dem OpenClipboard-Parameter zu tun hat, der ein IntPtr-Fensterhandle der Anwendung erwartet, die die Kontrolle über die Zwischenablage übernehmen will. Da ich erwähnt habe, dass meine Anwendung keine GUI hat, ist das eine Herausforderung. Ich war mir nicht sicher, was ich hier passieren sollte. Vielleicht kann jemand etwas Licht dazu bringen?
Benutzt ich die Zwischenablage-Klasse falsch? Gibt es eine klare Möglichkeit, das IntPtr-Fensterhandle einer Anwendung ohne GUI zu erhalten? Kennt jemand eine bessere Möglichkeit zum Sichern und Wiederherstellen der System-Zwischenablage?
Ich lief in den gleichen Fehler und fand diesen Beitrag. Dieser Fehler tritt jedoch nur auf, wenn ich Clipboard.GetDataObject(). SetData (myData) aufruft. Es funktioniert gut, wenn ich Clipboard.SetDataObject (myData) aufrufe. Irgendeine Erklärung warum? Meine App basiert auf WPF, wenn es darauf ankommt. – newman