0

我尝试创建一个剪贴板监视器程序,我需要检测何时从我的应用程序设置数据,然后我可以忽略它们,对于这项工作,我尝试将自定义格式添加到剪贴板,因此首先使用此代码注册新格式:

 int iii = RegisterClipboardFormat("ClipboardManagerIgnoreItem");


[DllImport("user32.dll")]
private static extern int RegisterClipboardFormat(string Format);

然后在将数据对象设置为剪贴板之前,将新格式设置为数据对象,如下所示:

 var data = dic_clip[key];//get source data 
 var data2 = data as DataObject;
 data2.SetData("ClipboardManagerIgnoreItem",false, "");//add new format 

最后将数据设置到剪贴板:

Clipboard.SetDataObject(data2, true);

但是在设置之后和之前,当我在应用程序中检查剪贴板数据时,我没有任何自定义格式!

var dt = data2.GetFormats(false);

怎么了 ?

4

1 回答 1

0

据我所知,不需要“注册”自定义剪贴板类型。这些类型只是字符串,应用程序只会采用他们知道的类型。如果要将您自己程序中的自定义数据放在剪贴板上,您可以使用使用[Serializable]属性的类,并按对象类型工作,或者只是将其作为原始字节流放在剪贴板上。

这个答案详细说明了如何做到这两个。原始示例是一个Byte[]对象,但任何可序列化的类都应该工作,在你的情况下,我假设你需要一个自定义类。

我个人从未尝试过回收DataObject从剪贴板中获得的内容,只向其中添加新内容,但我想这可能会奏效。当然,其他程序会清除它,但我认为这就是重点,您这样做是为了表明您的工具是否已经扫描了当前剪贴板数据。我可以看到这将是一个有效的方法。

于 2018-02-27T08:53:16.627 回答