[win32]监视剪贴板内容 【转】

来源:赵克立博客 分类: C/C++ 标签:Win32发布时间:2017-09-30 13:41:12最后更新:2017-09-30 13:41:12浏览:2088
版权声明:
本文为博主学习过程中整理发布,如有侵权请告知
更新时间:
2017-09-30 13:41:12
温馨提示:
学无止境,技术类文章有它的时效性,请留意文章更新时间,如发现内容有误请留言指出,防止别人"踩坑",我会及时更新文章


1、调用AddClipboardFormatListener函数,指定哪个窗口有资格去捕捉剪贴板内容更新的消息。

2、处理WM_CLIPBOARDUPDATE消息,当剪贴板的内容发生变化后,消息处理程序会收到这条消息通知。

在处理WM_CLIPBOARDUPDATE消息之前,一定要先调用AddClipboardFormatListener函数,它的原型如下:

/*  c++  */
BOOL WINAPI AddClipboardFormatListener(
  _In_  HWND hwnd
);

参数有且只有一个,就是窗口的句柄,你想让哪个窗口监控剪贴板,你就把这个窗口的句柄传进去。

 

下面是DllImport

        // C#
        [DllImport("User32.dll")]
        public extern static bool AddClipboardFormatListener(IntPtr hwnd);

然后,在Form的构造函数中调用。

        public Form1()
        {
            InitializeComponent();
            AddClipboardFormatListener(this.Handle);
        }

接着,如何写消息处理过程呢?重写WndProc方法。

        protected override void WndProc(ref Message m)
        {
            if (m.Msg == WM_CLIPBOARDUPDATE)
            {
                if (Clipboard.ContainsText())
                {
                    string strdata = Clipboard.GetText();
                    if (strdata.StartsWith("http://") || strdata.StartsWith("https://"))
                    {
                        this.txtOutput.AppendText(string.Format("在{0}剪贴板发生了变化。\r\n" +
                            "包含URI:{1}" +
                            "\r\n---------------------------------------------\r\n",
                            DateTime.Now.ToString("HH:mm:ss"),
                            strdata));
                        // 返回0表示已经处理消息
                        m.Result = new IntPtr(0);
                    }
                }
            }
            else
            {
                base.WndProc(ref m);
            }
        }

微信号:kelicom QQ群:215861553 紧急求助须知
Win32/PHP/JS/Android/Python