繁体   English   中英

如何将自定义格式添加(附加)到剪贴板

[英]how can i add (append) custom format to clipboard

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

 int iii = RegisterClipboardFormat("ClipboardManagerIgnoreItem");


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

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

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

怎么了 ?

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

此答案详细说明了这两种方法。 最初的示例是Byte[]对象,但是任何可序列化的类都应该起作用,并且在您的情况下,我假设您需要自定义类。

我个人从未尝试过回收从剪贴板中获得的DataObject ,而仅向其中添加新的东西,但是我想那可能行得通。 当然,其他程序会清除它,但是我认为这很重要,您可以执行此操作以指示您的工具是否已扫描了当前剪贴板数据。 我可以看到这将是一种有效的方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM