【MoreWindows工作笔记12】WM_DRAWCLIPBOARD 监视剪切板
来源:互联网 发布:windows怎么换桌面 编辑:程序博客网 时间:2024/05/21 08:45
有很多程序会监视剪贴板,比如迅雷,这样当你复制一个迅雷下载链接时,迅雷就可以自动启动并创建一个新的下载任务。下面我们就来看看如何实现这个技术。
实现这个技术一共需要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)
// 【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;}
运行程序,复制《【霍比特人2:史矛革之战】》的下载链接,然后程序会显示:
最后再列一下目录,方便大家查看。
1.《【MoreWindows工作笔记9】OleGetClipboard 访问剪切板的文本内容》
http://blog.csdn.net/morewindows/article/details/17655053
2.《【MoreWindows工作笔记10】OleGetClipboard 访问剪切板上的文件信息》
http://blog.csdn.net/morewindows/article/details/17655057
3.《【MoreWindows工作笔记11】EnumClipboardFormats剪切板内容的数据格式》
http://blog.csdn.net/morewindows/article/details/17655299
4.《【MoreWindows工作笔记12】WM_DRAWCLIPBOARD 监视剪切板》
http://blog.csdn.net/morewindows/article/details/17655429
本文地址:http://blog.csdn.net/morewindows/article/details/17655429 转载请标明出处,谢谢。
欢迎关注微博:http://weibo.com/MoreWindows
- 【MoreWindows工作笔记12】WM_DRAWCLIPBOARD 监视剪切板
- 【MoreWindows工作笔记12】WM_DRAWCLIPBOARD 监视剪切板
- 【MoreWindows工作笔记9】OleGetClipboard 访问剪切板的文本内容
- 【MoreWindows工作笔记11】EnumClipboardFormats 剪切板内容的数据格式
- 【MoreWindows工作笔记10】OleGetClipboard 访问剪切板上的文件信息
- 【MoreWindows工作笔记5】StrFormatByteSize64 高端大气的显示文件大小
- 【MoreWindows工作笔记6】PathCommonPrefix 路径公共前缀
- 【MoreWindows工作笔记7】PathIsPrefix 判断路径的包含关系
- 【MoreWindows工作笔记1】 C/C++ 输出宽字符 printf + %ls or wcout
- 【MoreWindows工作笔记2】 查看当前系统使用的字符集 GetSystemDefaultLocaleName
- 【MoreWindows工作笔记3】 使用cout/pintf输出16进制,8进制,2进制数据
- 【MoreWindows工作笔记4】 获取文件图标,类型名称,属性 SHGetFileInfo
- 【MoreWindows工作笔记8】PathFindSuffixArrayW 路径是否有给定的后缀
- 监视注册表,剪切板,文件夹的改动
- VB.net 监视Windows剪切板中数据变化
- 监视自动工作负荷知识库
- 关于响应 WM_DRAWCLIPBOARD
- 剪切板
- 【Node】node的模块
- NERD tree Mappings
- Number theory
- C语言内存管理
- 《Java并发》:第四节 线程池
- 【MoreWindows工作笔记12】WM_DRAWCLIPBOARD 监视剪切板
- 性能优化杂谈
- UI_涂鸦作业
- 将 Hadoop YARN 发扬广大
- Timus 1513 Lemon Tale
- IO流__【对象的序列化】【管道流】【RandomAccessFile】【DataStream】【ByteArrayStream等】
- Shell编程基础
- 南邮-1950-比赛现场气氛营造问题
- 【VC++】009菜单命令响应函数