我遇到了恢复数据的问题,这里是代码,如果你阅读了评论,那么我认为你会理解这个问题,并希望知道如何解决这个问题。
var oldclip = System.Windows.Clipboard.GetDataObject(); //Here we save the clipboard
var oldpoint = CursorPosition;
CursorPosition = new System.Drawing.Point((Convert.ToInt32((rect.Width - rect.X) * 0.45) + rect.X), Convert.ToInt32((rect.Height - rect.Y) * 0.75) + rect.Y);
DoLeftMouseClick();
SetForegroundWindow(hwnd);
System.Threading.Thread.Sleep(20);
System.Windows.Forms.SendKeys.SendWait("^a^c{ESCAPE}"); // here we go select all text and then copy it to the clipboard
if (System.Windows.Clipboard.GetDataObject().GetDataPresent(DataFormats.Text)) //if the clipboard has text then we do something with it to get that info in the blabla here
{
//...blabla //
}
System.Windows.Clipboard.SetDataObject(oldclip); // HERE I want to restore the clipboard but that fails! After this when I CTRL+P(paste) then it returns nothing,(while it should still have the same "oldclip" data no??
编辑:我更了解如何解释我的问题。让我们说我有2个按钮,按钮保存&按钮恢复。
我们得到了一个变量:
IDataObject oldclip;
按钮保存代码为:
oldclip = System.Windows.Clipboard.GetDataObject();
我们收到了恢复按钮代码
System.Windows.Clipboard.SetDataObject(oldclip);
现在我复制一些文字“randomtext123”。我按下保存按钮。然后我去复制一些其他文本“otherrandomtext”。 现在,如果我按下恢复按钮,我希望剪贴板数据再次成为“randomtext123”,但这不会发生。(因为如果我在resto按钮之后粘贴它没有做任何事情,就像剪贴板上没有任何东西一样)。希望你现在更好地理解这个问题:)
答案 0 :(得分:3)
这应该产生预期的结果:
public class ClipboardBackup
{
Dictionary<string, object> contents = new Dictionary<string,object>();
public void Backup()
{
contents.Clear();
IDataObject o = Clipboard.GetDataObject();
foreach (string format in o.GetFormats())
contents.Add(format, o.GetData(format));
}
public void Restore()
{
DataObject o = new DataObject();
foreach (string format in contents.Keys)
{
o.SetData(format, contents[format]);
}
Clipboard.SetDataObject(o);
}
}
P.S。你可能不想这样做。请参阅此答案:https://stackoverflow.com/a/2579846/305865
答案 1 :(得分:0)
根据MSDN documentation,如果要使用系统剪贴板,则必须将权限设置为AllClipboard:
有权访问系统剪贴板上的数据。关联的 枚举:AllClipboard
我刚测试过,在代码库中运行此代码可以解决问题:
UIPermission clipBoard = new UIPermission(PermissionState.None);
clipBoard.Clipboard = UIPermissionClipboard.AllClipboard;