当前位置:首页 >> 编程开发 >> Visual C++ >> 内容

Win32开发入门(25):监视剪贴板

时间:2015/5/19 21:32:17 作者:平凡之路 来源:xuhantao.com 浏览:

自从郭大侠和蓉儿离开桃花岛后,最近岛比较寂静,有一种“门前冷落鞍马稀”的感觉。于是,老 邪就拿出《九阴真经》认真阅读,同时用迅雷下载经典大剧《汉武大帝》晚上睡觉前看上几集,老邪一 向是善于向古圣先贤学习。

大家知道,迅雷有一个监视剪贴板的功能,如果发现你复制剪贴板 的内容包含符合迅雷下载地址格式的就弹出新建下载任务窗口。

可能我们也希望在自己的应用 程序中也加入这样XX的功能,其实不难,真的,我用老顽童的人格保证,实现该功能是灰常简单的。

我们需要完成两步就行了。

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

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

我相信,你一定想到了实现思路了。呵呵,我一 向对于大家的领悟能力是很有信心的,所以,有时候我故意不说那么明白。其实我们学编程,不能什么 问题都指望别人帮忙解决,依靠自己去解决问题才是上尚之道。

今天老邪不用C++来做这个例子 ,用什么?VB,呵呵,其实也可以,只是许多自负的人看不起VB,很可悲;Delphi?还是不要,不然老 顽童会骂人。还是用C#,一来它的语法符合C风格,二来它也可以调用Win32 API。

估计有人会 纳闷了,写Win32程序不是要用C++吗?干吗用C#?呵呵,很简单,因为我是老邪,本来俺练的盖世武功 就是“旁门左道”,更何况,这年头,人是以非主流为无上光荣的。今天老邪也想“光荣”一回,免得 蓉儿说我老了,功夫不行了。

而且,我咨询过相关律师,法律上并没有规定写Win32程序一定要 用C++,再说,WinForm本质上也是Win32,而且人家WinForm还可以做Win64呢。

正因为今天的任 务很简单,所以我忍不住拿出了看家本领——吹牛,是啊,吹牛好啊,人生难得几回吹。

在处 理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);  
    }  
}

最后,可以测试,随便复制一些URI到剪贴板。如下图所示。

好了,大功告成,继续下电影去,拜拜。

相关文章
  • 没有相关文章
共有评论 0相关评论
发表我的评论
  • 大名:
  • 内容:
  • 徐汉涛(www.xuhantao.com) © 2024 版权所有 All Rights Reserved.
  • 部分内容来自网络,如有侵权请联系站长尽快处理 站长QQ:965898558(广告及站内业务受理) 网站备案号:蒙ICP备15000590号-1