有很多程序会监视剪贴板,比如迅雷,这样当你复制一个迅雷下载链接时,迅雷就可以自动启动并创建一个新的下载任务。下面我们就来看看如何实现这个技术。
实现这个技术一共需要4步:
第一步:Add the window to the clipboard viewer chain.
通过SetClipboardViewer()传入窗口句柄,所有监视剪贴板的窗口句柄会组成一个链表(后来者靠前)。这样当剪贴板内容发生变化时,Windows系统给给这些窗口发生消息。
第二步:Process the WM_CHANGECBCHAIN message.
当这个监视剪贴板的窗口句柄链表发生变化时,会收到这个消息。每个窗口都应该给下一个窗口传递消息。
这个消息的wParam和lParam说明如下:
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)
- <pre code_snippet_id="136423" snippet_file_name="blog_20131231_1_3522517" class="cpp" name="code">// 【MoreWindows工作笔记12】WM_DRAWCLIPBOARD 监视剪切板
- // http://blog.csdn.net/morewindows/article/details/17655429
- // By MoreWindows( http://blog.csdn.net/MoreWindows )
- BOOL CALLBACK DlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
- {
- static HWND s_hwnd_new_clipboard_viewer = NULL;
- static HWND s_hwnd_edit_clipboard_info = NULL;
- switch (message)
- {
- case WM_INITDIALOG:
- // 4-1 Add the window to the clipboard viewer chain.
- s_hwnd_new_clipboard_viewer = SetClipboardViewer(hDlg);
- // 把hwnd加入监视链,返回上一个加入的窗口句柄,如果是第一个,则返回值为NULL。新加的窗口在链条头部,成为“当前监视器”
- CenterWindow(hDlg);
- s_hwnd_edit_clipboard_info = GetDlgItem(hDlg, IDC_EDIT_CLIPBOARD_INFO);
- return FALSE;
- // 4-2 Process the WM_CHANGECBCHAIN message.
- case WM_CHANGECBCHAIN:
- if ((HWND)wParam == s_hwnd_new_clipboard_viewer)
- s_hwnd_new_clipboard_viewer = (HWND)lParam;
- else
- SendMessage(s_hwnd_new_clipboard_viewer, message, wParam, lParam);
- // 4-3 Process the WM_DRAWCLIPBOARD message.
- case WM_DRAWCLIPBOARD: //剪切板内容发生变化
- if (OpenClipboard(hDlg)) {
- UINT clipboard_format = EnumClipboardFormats(0);
- HGLOBAL global_memory = GetClipboardData(clipboard_format);
- DWORD data_size = GlobalSize(global_memory);
- CloseClipboard();
- WCHAR clipboard_info[1024];
- 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);
- if (clipboard_format == CF_UNICODETEXT) {
- LPCWSTR clipboard_data = (LPCWSTR)GlobalLock(global_memory);
- if (clipboard_data != NULL) {
- wcscat(clipboard_info, L"\r\nData: \r\n");
- WCHAR buffer[1024];
- DWORD data_size = GlobalSize(global_memory);
- for (size_t i = 0; i < data_size; i++)
- buffer[i] = clipboard_data[i];
- buffer[data_size] = L'\0';
- wcscat(clipboard_info, buffer);
- }
- }
- SetWindowTextW(s_hwnd_edit_clipboard_info, clipboard_info);
- }
- return FALSE;
- case WM_COMMAND:
- switch (LOWORD(wParam))
- {
- case IDOK:
- case IDCANCEL:
- // 4-4 Remove the window from the clipboard viewer chain before it is destroyed.
- ChangeClipboardChain(hDlg, s_hwnd_new_clipboard_viewer);
- EndDialog(hDlg, FALSE);
- return TRUE;
- }
- break;
- }
- return FALSE;
- }</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
苏霁月火喇!
一晚之内成南朝大街小巷传颂嘅都系佢嘅英雄事迹。
停人甲:呢狼女不愧为狼女,初入京城就敢闯七皇子嘅房间,睇咗人冲凉唔讲,仲同人哋大打出手!