zoukankan      html  css  js  c++  java
  • 监视剪贴板(转)

    监视剪贴板

    使用一些下载工具比如FlashGet、DuDu下载器,通常有一个选项叫做监视剪贴板,如果发现指定类型的后缀名,则自动开始下载,监视剪贴板的小技巧很有实用价值。        下面就说说监视剪贴板的小技巧。        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函数完成。 代码:
                 [DllImport("User32.dll")]         protected static extern int SetClipboardViewer(int hWndNewViewer);         [DllImport("User32.dll", CharSet=CharSet.Auto)]         public static extern bool ChangeClipboardChain(IntPtr hWndRemove, IntPtr hWndNewNext);         [DllImport("user32.dll", CharSet=CharSet.Auto)]             public static extern int SendMessage(IntPtr hwnd, int wMsg, IntPtr wParam, IntPtr lParam);     IntPtr nextClipboardViewer;              protected override void WndProc(ref System.Windows.Forms.Message m)         
  • 相关阅读:
    atitit.面向过程的编程语言异常处理 c语言 asp vbs 的try catch 实现
    Atitit.ide代码块折叠插件 eclipse
    Atitit.注重细节还是关注长远??长远优先
    atitit.安全的签名摘要 算法attilax总结
    Atitit.各种 数据类型 ( 树形结构,表形数据 ) 的结构与存储数据库 attilax 总结
    Atitit. 委托的本质 c#.net java php的比较
    Atitit.注册跟个登录功能的实现attilax总结obo
    atitit..sql update语法的词法分析,与语法ast构建
    atitit.GUI图片非规则按钮跟动态图片切换的实现模式总结java .net c# c++ web html js
    Atitit.数据库事务隔离级别 attilax 总结
  • 原文地址:https://www.cnblogs.com/lorking/p/4054321.html
Copyright © 2011-2022 走看看