您好,欢迎访问一九零五行业门户网

c#实现Windows剪贴板监视器的代码具体介绍

windows剪贴板剪贴板(clipboard)是内存中的一块区域,是windows内置的一个非常有用的工具,通过小小的剪贴板,架起了一座彩桥,使得在各种应用程序之间,传递和共享信息成为可能。然而美中不足的是,剪贴板只能保留一份数据,每当新的数据传入,旧的便会被覆盖。
相关windows api最主要的是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
wndproc函数操作系统向应用程序发送一系列消息,如左键按下和左键抬起,应用程序将通过getmessage等方法最终将消息提交到窗口过程(wndproc[英文全称windows process])指向一个应用程序定义的窗口过程的指针。
我们需要重写该函数来处理剪贴板内容改变事件:
#region message process //override wndproc to get messages... protected override void wndproc(ref message m) { switch (m.msg) { case wm_drawclipboard: { //the clipboard has changed... //########################################################################## // process clipboard here :)........................ //########################################################################## sendmessage(mnextclipboardviewerhwnd, m.msg, m.wparam.toint32(), m.lparam.toint32()); //显示剪贴板中的文本信息 if (clipboard.containstext()) { label1.text = clipboard.gettext(); } //显示剪贴板中的图片信息 if (clipboard.containsimage()) { picturebox1.image = clipboard.getimage(); picturebox1.update(); } break; } case wm_changecbchain: { //another clipboard viewer has removed itself... if (m.wparam == (intptr)mnextclipboardviewerhwnd) { mnextclipboardviewerhwnd = m.lparam; } else { sendmessage(mnextclipboardviewerhwnd, m.msg, m.wparam.toint32(), m.lparam.toint32()); } break; } } base.wndproc(ref m); } #endregion
效果:
以上就是c#实现windows剪贴板监视器的代码具体介绍的详细内容。
其它类似信息

推荐信息