c 實現Windows剪貼簿監視器

2021-08-21 05:57:22 字數 3602 閱讀 9333

剪貼簿(clipboard)是記憶體中的一塊區域,是windows內建的乙個非常有用的工具,通過小小的剪貼簿,架起了一座彩橋,使得在各種應用程式之間,傳遞和共享資訊成為可能。然而美中不足的是,剪貼簿只能保留乙份資料,每當新的資料傳入,舊的便會被覆蓋。

最主要的是setclipboardviewer,每當剪貼簿的內容發生變化時,該函式通過wm_drawclipboard訊息將視窗加入被通知的視窗鏈。

由於剪貼簿觀察器鏈中下乙個視窗的控制代碼還沒有返回,應用程式不應傳遞它在setclipboardviewer

呼叫過程中接收到的wm_drawclipboard訊息。

如果要從剪貼簿觀察器鏈中去掉視窗鏈,則應用程式必須呼叫changeclipboard成員函式。

? 1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

#region definitions

//constants for api calls...

privateconstintwm_drawclipboard =0x308;

privateconstintwm_changecbchain =0x30d;

//handle for next clipboard viewer...

privateintptr mnextclipboardviewerhwnd;

//api declarations...

[dllimport(user32.dll, charset = charset.auto)]

staticpublicextern intptr setclipboardviewer(intptr hwndnewviewer);

[dllimport(user32.dll, charset = charset.auto)]

staticpublicextern bool changeclipboardchain(intptr hwnd, intptr hwndnext);

[dllimport(user32.dll, charset = charset.auto)]

publicstaticexternintsendmessage(intptr hwnd,intmsg,intwparam,intlparam);

#endregion

作業系統向應用程式傳送一系列訊息,如左鍵按下和左鍵抬起,應用程式將通過getmessage等方法最終將訊息提交到視窗過程(wndproc[英文全稱windows process])指向乙個應用程式定義的視窗過程的指標。

我們需要重寫該函式來處理剪貼簿內容改變事件:

? 1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

#region message process

//override wndproc to get messages...

protectedoverridevoidwndproc(ref message m)

//顯示剪貼簿中的資訊

if(clipboard.containsimage())

break;

}

casewm_changecbchain:

else

break;

}

}

base.wndproc(ref m);

}

#endregion

效果:

c 實現Windows剪貼簿監視器

剪貼簿 clipboard 是記憶體中的一塊區域,是windows內建的乙個非常有用的工具,通過小小的剪貼簿,架起了一座彩橋,使得在各種應用程式之間,傳遞和共享資訊成為可能。然而美中不足的是,剪貼簿只能保留乙份資料,每當新的資料傳入,舊的便會被覆蓋。最主要的是setclipboardviewer,每...

c 實現Windows剪貼簿監視器

剪貼簿 clipboard 是記憶體中的一塊區域,是windows內建的乙個非常有用的工具,通過小小的剪貼簿,架起了一座彩橋,使得在各種應用程式之間,傳遞和共享資訊成為可能。然而美中不足的是,剪貼簿只能保留乙份資料,每當新的資料傳入,舊的便會被覆蓋。最主要的是setclipboardviewer,每...

用 C 監視剪貼簿的活動狀態

翻譯的不好的地方望指出。一步一步的教導 處理 wm drawclipboard 訊息。可以提供乙個 form 類超載 wndproc 類成員函式做到。不久你會看到乙個例子。處理 wm changecbchain 訊息。因為每個視窗處理 wm drawclipboard 訊息時負責傳送這一訊息給在鍊錶...