如何使用C++在后台跟踪剪贴板的更改

How to track clipboard changes in the background using C++

本文关键字:剪贴板 跟踪 后台 何使用 C++      更新时间:2023-10-16

我需要在后台应用程序中处理剪贴板的内容。

我该怎么做?

我需要一个每次更改剪贴板时都会调用的事件。从哪个应用程序复制应用程序并不重要。

我知道读写的功能,比如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;