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