[英]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.