【MoreWindows工作笔记12】WM_DRAWCLIPBOARD 监视剪切板

来源:互联网 发布:mac u盘 没有退出选项 编辑:程序博客网 时间:2024/05/18 00:26

有很多程序会监视剪贴板,比如迅雷,这样当你复制一个迅雷下载链接时,迅雷就可以自动启动并创建一个新的下载任务。下面我们就来看看如何实现这个技术。


实现这个技术一共需要4步:

第一步:Add the window to the clipboard viewer chain.

通过SetClipboardViewer()传入窗口句柄,所有监视剪贴板的窗口句柄会组成一个链表(后来者靠前)。这样当剪贴板内容发生变化时,Windows系统给给这些窗口发生消息。


第二步:Process the WM_CHANGECBCHAIN message.

当这个监视剪贴板的窗口句柄链表发生变化时,会收到这个消息。每个窗口都应该给下一个窗口传递消息。

这个消息的wParamlParam说明如下:

wParam表示

A handle to the window being removedfrom the clipboard viewer chain

lParam表示

A handle to the next window in thechain following the window being removed. This parameter is NULL if thewindow being removed is the last window in the chain


第三步:Process the WM_DRAWCLIPBOARD message.

当剪贴板数据发送变化时,窗口会依次收到这个消息。


第四步:Remove the window from the clipboard viewer chain before itis destroyed.

当窗口关闭时,应该调用ChangeClipboardChain()来通知Windows系统将自己从监视剪贴板的窗口句柄链表中移除。


代码如下(下载地址:http://download.csdn.net/download/morewindows/6793027)

[cpp] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. <pre code_snippet_id="136423" snippet_file_name="blog_20131231_1_3522517" class="cpp" name="code">// 【MoreWindows工作笔记12】WM_DRAWCLIPBOARD 监视剪切板  
  2. // http://blog.csdn.net/morewindows/article/details/17655429  
  3. // By MoreWindows( http://blog.csdn.net/MoreWindows )  
  4. BOOL CALLBACK DlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)  
  5. {  
  6.   static HWND s_hwnd_new_clipboard_viewer = NULL;  
  7.   static HWND s_hwnd_edit_clipboard_info = NULL;  
  8.   
  9.     switch (message)  
  10.     {  
  11.     case WM_INITDIALOG:  
  12.     // 4-1 Add the window to the clipboard viewer chain.   
  13.     s_hwnd_new_clipboard_viewer = SetClipboardViewer(hDlg);  
  14.     // 把hwnd加入监视链,返回上一个加入的窗口句柄,如果是第一个,则返回值为NULL。新加的窗口在链条头部,成为“当前监视器”  
  15.         CenterWindow(hDlg);  
  16.     s_hwnd_edit_clipboard_info = GetDlgItem(hDlg, IDC_EDIT_CLIPBOARD_INFO);  
  17.         return FALSE;  
  18.   
  19.   // 4-2 Process the WM_CHANGECBCHAIN message.   
  20.   case WM_CHANGECBCHAIN:  
  21.     if ((HWND)wParam == s_hwnd_new_clipboard_viewer)  
  22.       s_hwnd_new_clipboard_viewer = (HWND)lParam;  
  23.     else  
  24.       SendMessage(s_hwnd_new_clipboard_viewer, message, wParam, lParam);  
  25.   
  26.   // 4-3 Process the WM_DRAWCLIPBOARD message.   
  27.   case WM_DRAWCLIPBOARD:  //剪切板内容发生变化  
  28.     if (OpenClipboard(hDlg)) {  
  29.       UINT clipboard_format = EnumClipboardFormats(0);  
  30.       HGLOBAL global_memory = GetClipboardData(clipboard_format);  
  31.       DWORD data_size = GlobalSize(global_memory);  
  32.       CloseClipboard();  
  33.       WCHAR clipboard_info[1024];  
  34.       swprintf(clipboard_info, L"Clipboard\r\n Data Format = %x\r\n Data Address = 0x%x\r\n Data Size = %d", clipboard_format, global_memory, data_size);  
  35.       if (clipboard_format == CF_UNICODETEXT) {  
  36.         LPCWSTR clipboard_data = (LPCWSTR)GlobalLock(global_memory);  
  37.         if (clipboard_data != NULL) {  
  38.           wcscat(clipboard_info, L"\r\nData: \r\n");  
  39.           WCHAR buffer[1024];  
  40.           DWORD data_size = GlobalSize(global_memory);  
  41.           for (size_t i = 0; i < data_size; i++)  
  42.             buffer[i] = clipboard_data[i];  
  43.           buffer[data_size] = L'\0';  
  44.           wcscat(clipboard_info, buffer);  
  45.         }  
  46.       }  
  47.       SetWindowTextW(s_hwnd_edit_clipboard_info, clipboard_info);  
  48.     }  
  49.     return FALSE;  
  50.   
  51.     case WM_COMMAND:  
  52.         switch (LOWORD(wParam))  
  53.         {  
  54.         case IDOK:  
  55.         case IDCANCEL:  
  56.       // 4-4 Remove the window from the clipboard viewer chain before it is destroyed.   
  57.       ChangeClipboardChain(hDlg, s_hwnd_new_clipboard_viewer);  
  58.             EndDialog(hDlg, FALSE);  
  59.             return TRUE;  
  60.         }  
  61.         break;  
  62.     }  
  63.     return FALSE;  
  64. }</pre><br>  

运行程序,复制《【霍比特人2:史矛革之战】》的下载链接,然后程序会显示:




(完)






















































佢系21世界最强雇佣兵,见穿越好成咗只狼女。
着到狼女就算嘞,爹妈偏生仲要畀佢去相睇喎,结果呢倒好,一唔小心相上咗个光脱脱嘅王爷,从此佢嘅人生发生咗翻天覆地嘅变化。
某只王爷:挖眼都系死,二拣
某只狼女:(唔系睇净系得嘢)你系羞家于太细定搅基,二拣
小?
王爷眼神一眯,呢个女人系咪眼神唔使得?
后来,当狼女畀赐婚,嫁嘅正系搅基王爷,结婚之后,噉叫个惨不忍众。”

……
“宫衍,我虽唔七,但你放心,只要我重有一啖气,只要我可
http://t.zhulong.com/u11169491/

睹。出呢地牢嚟架,我一定会将你哋嘅罪行公诸于
http://t.zhulong.com/u11169685/
http://t.zhulong.com/u11169690/
http://t.zhulong.com/u11169695/

够胆话佢细,笑!真系当佢堂堂战王系食斋嘅!
http://www.tianya.cn/128300159/
http://www.tianya.cn/128296328/
http://www.dianyuan.com/people/706701/
http://www.tianya.cn/128332802/

「仲细啊?”某只王爷睇某女气若游丝嘅惨呀,得意嘅挑起长眉,面容噉叫个得瑟。

http://t.zhulong.com/u11167729/

临死前一幕幕,唔停噉喺脑海中闪过……
“我算系看清喇,好似你噉嘅伪君子,就算生上十世,百世,都系卑鄙阴嘅小人!”


http://www.tianya.cn/128341678/
http://www.tianya.cn/128341802/
http://www.dianyuan.com/people/706701/

「又落毒,又构陷,就呢都唔够,竟然仲砍断太子嘅手足,你哋简直连禽兽都不如罗!”

http://www.dianyuan.com/people/706828/
http://www.dianyuan.com/people/706861/
https://club.1688.com/article/62280805.html
https://club.1688.com/article/62280819.html
https://club.1688.com/article/62280845.html
https://club.1688.com/article/62280851.html
https://club.1688.com/article/62280879.html
https://club.1688.com/article/62280872.html
https://club.1688.com/article/62280870.html
https://club.1688.com/article/62293691.html

“宫澈,我可以明白嘅话畀你知,只要我唔死,只要我可
https://club.1688.com/article/62293811.html
https://club.1688.com/article/62293819.html

停人乙:系丫,七皇子系边个,战场杀神,生擒嘅地狱罗刹,放眼成南朝,边个够胆惹佢?
停人丙:尤其系七皇子最憎女人,听讲三步之内有女使诛,呢狼女丫,只怕生唔生啦!

https://club.1688.com/article/62294005.html
https://club.1688.com/article/62294069.html



*将军府入便,苏霁月拍案而起:唔系睇净系得未呀?搞到同日塌低咗一样,最多我负责咗就系!

https://club.1688.com/article/62294155.html

https://club.1688.com/article/62294186.html

将军爹妈嘅身子当即发成筛子:个女丫,但系皇上是宝七皇子殿下啊
https://club.1688.com/article/62294382.html

此刻,佢无声呢喃住。
唔!
咁咪梦!
畀至亲之人背叛,又落毒,又构陷,眼盲失语,最后都畀砍断手足,成身血,好似死狗一样畀挂喺树杈上暴晒,点会系一个梦可以嚟解释?
身上嘅中衣已经畀汗水浸透,佢咪咗皱眉,起身下床,脚步略显虚浮,走向温泉池沐浴。
宫澈,我兄弟,我视作胞弟嘅异乸兄弟。

以喺呢度行出,我一定会畀你报仇呀,一定会将嗰啲小人嘅罪行公诸于世,并亲手手刃佢哋!”

不平,仲讲为佢报仇呀。
“云轻舞……”!佢低喃住个名,修长如玉般嘅手指,一直抚喺脸庞上。
https://club.1688.com/article/62294403.html
https://club.1688.com/article/62294417.html

雪儿,我个表妹,我要娶返做正妃嘅表妹。
因为相信天下最难有亲情嘅地方——皇宫,有你哋相伴喺侧,我信啦,我信你哋给予我系真情。

https://club.1688.com/article/62294448.html


水汽袅袅升腾,宫衍坐喺温泉池中,成个人并未觉得暖。
https://club.1688.com/article/62294460.html

母后听噉,我亚姨,我视作生母般孝敬嘅亚姨。

心系冻,血系冻嘅。
系畀嗰啲佢最信任嘅亲人所致!
https://club.1688.com/article/62294472.html

「你伤得好重,即便我明医,喺呢度却是救唔到你……”!
……
https://club.1688.com/article/62328724.html

“……咁我咪嘅故事,讲起,我真系衰,罗个福利都冇几耐,有可能又要面临死亡。死,我唔惊,但一谂到啲卑鄙龌蹉嘅小人,依旧张狂噉生,我招嘢嘅仲真系唔甘心。”
“宫衍,我,我惊系要食言啦!”
“宫衍,如果你唔死,就好好噉唔死,唔死,就有希望……”!
“老娘就系做鬼,都唔会放过你哋!”
……
抚上脸庞,宫衍嘴角泛起一抹极致柔和笑,呢个系佢平生第一次笑,可佢凤眸中就聚满晒伤痛。
傻女人,明明素不相识,就拖着残破嘅身体,为佢个快死之人挡剑,为佢抱
https://club.1688.com/article/62328797.html
http://www.ximalaya.com/81063150/

就唔成,想,畀亲情背叛,畀你哋联起手累身败名裂,死冇全尸。

https://club.1688.com/article/62328724.html

苏霁月火喇!
一晚之内成南朝大街小巷传颂嘅都系佢嘅英雄事迹。
停人甲:呢狼女不愧为狼女,初入京城就敢闯七皇子嘅房间,睇咗人冲凉唔讲,仲同人哋大打出手!

























































0 0
原创粉丝点击