c 實現Windows剪貼簿監視器

2021-06-28 00:08:44 字數 1598 閱讀 2405

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

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

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

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

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

#region definitions

//constants for api calls...

private const int wm_drawclipboard = 0x308;

private const int wm_changecbchain = 0x30d;

//handle for next clipboard viewer...

private intptr mnextclipboardviewerhwnd;

//api declarations...

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

static public extern intptr setclipboardviewer(intptr hwndnewviewer);

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

static public extern bool changeclipboardchain(intptr hwnd, intptr hwndnext);

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

public static extern int sendmessage(intptr hwnd, int msg, int wparam, int lparam);

#endregion

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

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

#region message process

//override wndproc to get messages...

protected override void wndproc(ref message m)

//顯示剪貼簿中的資訊

if (clipboard.containsimage())

break;

}case wm_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 訊息時負責傳送這一訊息給在鍊錶...