2010-02-19 83 views
9

對於我正在編寫的一個小型實用程序(.NET,C#),我想監視剪貼板複製操作和剪貼板粘貼操作。如何獲得剪貼板粘貼通知並提供我自己的數據?

我的想法是在粘貼到任意應用程序時提供自己的數據。

通過使用clipboard viewer可以輕鬆完成對複製操作的監視。

東西似乎更先進的對我來說是一個「剪貼板粘貼提供商」寫:

  • 答案爲「是什麼格式都可用」的應用程序的查詢。
  • 嚮應用程序粘貼操作提供數據。

我發現this postingthis posting,但他們都沒有真正幫助我。

我想我是以某種方式不得不模仿/劫持當前的剪貼板。

問:

是否可以「包裝」剪貼板中粘貼操作方面,並提供我自己的一種「剪貼板代理」的?

+1

PS:我知道你在CodeProject上; ! :D大聲笑 – t0mm13b 2010-02-19 18:13:57

回答

11

您需要通過使用windows鉤子來掛鉤剪貼板掛鉤。窗口鉤子是攔截髮生的全局事件並提供您自己的鉤子程序來替換或攔截消息的一種方式。在這裏看看CodeProject解釋如何掛鉤。這裏有一個clipboard helper,用於偵聽複製/粘貼功能。這是一個Clipboard spy,只是這樣做。這是另一篇文章,實現Clipboard hook

+5

謝謝,湯姆!最好的文章參考是鉤住「Ctrl + V」的人。但是:如果用戶右鍵單擊並從上下文菜單中選擇「粘貼」或者以其他方式完成選擇,該怎麼辦?我想解決方案將不會鉤住鍵盤/鼠標/而是攔截直接剪貼板通信本身。 – 2010-02-20 11:37:54

9

在WinAPI中查看「延遲渲染」。使用這種技術,您可以使用空柄來加載剪貼板,並且在粘貼時,Windows會通過WM_RENDERFORMAT消息通知您。這就是Excel這樣的應用程序如何能夠「複製」25種不同的格式。它並不是完全複製它們。它實際上會生成一些像TEXT一樣的常見文件,但是會像Bitmap,Html,WKS等那樣「廣告」其他人,選擇等待查看目標應用程序要粘貼的內容。
考慮一下:您可以在Excel中選擇5000個單元格並進行復制,並且剪貼板可以很快更新。現在粘貼到Windows Paint中,當Excel嘗試渲染一個巨大的位圖時,系統會突然抓取。在使用所有可用內存和吃掉頁面文件後,舊版本通常會崩潰。儘管如此,這已經回到了Windows 3.1的時代。現代版本給出了關於「位圖太大」或「內存不足」的消息。 警告:延遲渲染將被監視剪貼板並自動將數據自動粘貼到自己的應用程序(例如遠程桌面,VMWare,Office剪貼板和我自己的ClipMate)過早觸發。可以通過使用CF_Clipboard_Viewer_Ignore標誌忽略剪貼板更新,可以告訴一些剪貼板監視程序:我在此處記錄了這個標記: link text

+0

男人......驚人.. – 2017-07-08 14:42:49