下面就说说监视剪贴板的小技巧。
Windows系统使用list或者是chain来保存当剪贴板的数据发生变化的时候要求被通知到的一些窗口。
每一次当剪贴板的数据发生变化的时候,这个list的第一个窗口收到一个WM_DRAWCLIPBOARD系统消息, 该窗口可以查询剪贴板数据的相关信息。这个非常简单的过程,我们只要遵循下面几条说明,调用相关的win32API函数就行了。
(1)protected static extern int SetClipboardViewer(int hWndNewViewer);
当调用SetClipboardViewer函数的时候,需要传递接收这个消息(WM_DRAWCLIPBOARD)的窗口句柄作为参数,SetClipboardViewer 返回当前观察链中下一个窗口句柄,通常程序需要保存这个值,因为我们需要把消息传递给观察链中的下一个窗口。
(2)处理WM_DRAWCLIPBOARD 消息
重载窗体的WndProc方法,处理消息,参看程序
(3)处理 WM_CHANGECBCHAIN消息,因为每个处理WM_DRAWCLIPBOARD消息的窗口必须担负把消息传递个下个观察链窗口的任务。
(4)处理WM_CHANGECBCHAIN消息,当一个窗口把自己从观察链移出时候的消息。该移出过程(程序结束时)通过调用Win32ChangeClipboardChain函数完成。
代码: