剪貼簿(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 訊息時負責傳送這一訊息給在鍊錶...