如何使用C++在后台跟踪剪贴板的更改
How to track clipboard changes in the background using C++
我需要在后台应用程序中处理剪贴板的内容。
我该怎么做?
我需要一个每次更改剪贴板时都会调用的事件。从哪个应用程序复制应用程序并不重要。
我知道读写的功能,比如GetClipboardData()
和SetClipboardData()
。
有什么想法如何在C++中做到这一点吗?
提前感谢!
由于Windows Vista,正确的方法是使用剪贴板格式的侦听器:
case WM_CREATE:
// ...
AddClipboardFormatListener(hwnd);
// ...
break;
case WM_DESTROY:
// ...
RemoveClipboardFormatListener(hwnd);
// ...
break;
case WM_CLIPBOARDUPDATE:
// Clipboard content has changed
break;
请参阅监控剪贴板内容:
有三种方法可以监视对剪贴板的更改。最古老的方法是创建剪贴板查看器窗口。Windows2000增加了查询剪贴板序列号的功能,WindowsVista增加了对剪贴板格式侦听器的支持。剪贴板查看器窗口支持与早期版本的windows向后兼容新程序应使用剪贴板格式侦听器或剪贴板序列号。
查看监控剪贴板内容:
剪贴板查看器窗口显示剪贴板的当前内容,并接收剪贴板内容更改时的消息。创建剪贴板查看器窗口,您的应用程序必须执行以下操作:
Add the window to the clipboard viewer chain. Process the WM_CHANGECBCHAIN message. Process the WM_DRAWCLIPBOARD message. Remove the window from the clipboard viewer chain before it is destroyed.
将窗口添加到剪贴板查看器链:
case WM_CREATE:
// Add the window to the clipboard viewer chain.
hwndNextViewer = SetClipboardViewer(hwnd);
break;
处理WM_CHANGECBCHAIN消息:
case WM_CHANGECBCHAIN:
// If the next window is closing, repair the chain.
if ((HWND) wParam == hwndNextViewer)
hwndNextViewer = (HWND) lParam;
// Otherwise, pass the message to the next link.
else if (hwndNextViewer != NULL)
SendMessage(hwndNextViewer, uMsg, wParam, lParam);
break;
相关文章:
- C++剪贴板队列粘贴随机结果?
- 将缓冲区复制到剪贴板 [换行错误]
- wxWidgets mac剪贴板在3.1.3上坏了?
- 获取剪贴板数据(CF_HDROP)在剪切和粘贴中失败
- 在 UWP 中找不到剪贴板
- 剪贴板数据上使用的全局大小函数会导致错误
- 将矢量复制到剪贴板
- 通过EventFilter到剪贴板获取QlineEdit的某些属性
- 如何使用OlesetClipboard将我的COM对象放置在剪贴板上时解决问题
- 使用 WIC 阅读剪贴板
- 文本到剪贴板
- 在QT应用程序和Windows Explorer之间剪切和粘贴剪贴板交换
- Linux/C++ 将字符串复制到剪贴板
- 从表视图复制到剪贴板
- 在可以选择剪贴板副本时,如何禁用Ccombobox
- 无法将 HTML 格式的 unicode(wchar_t 使用)复制到剪贴板
- BitBlt从剪贴板复制位图会给出错误的颜色
- 将文本复制到 MFC 中的剪贴板
- 如何在程序或网站处于活动状态时禁用剪贴板和任务切换操作
- 如何使用C++在后台跟踪剪贴板的更改