0

我以标准建议的方式创建了一个剪贴板查看器,如下所示编辑 WndProc。

            case WM_DRAWCLIPBOARD:

                Logger.Main.LogMessage("Draw Clipboard event");
                if (OnClipboardChanged != null) {
                    OnClipboardChanged(this, new ViewChangeEventArgs());
                }
                WindowAPI.SendMessage(NextClipboardViewer, m.Msg, m.WParam, m.LParam);
                break;

            case WM_CHANGECBCHAIN:

                Logger.Main.LogMessage("Change CB Chain");
                if (m.WParam == NextClipboardViewer) {
                    NextClipboardViewer = m.LParam;
                }
                else {
                    WindowAPI.SendMessage(NextClipboardViewer, m.Msg, m.WParam, m.LParam);
                }
                break;

当剪贴板中有新数据可用时,我的应用程序只需要得到通知。一切正常,消息被正确检测到。

有时(这很难重现)我会收到大量 WM_DRAWCLIPBOARD 生成的事件,这些事件使用相同的时间戳生成,与剪贴板中的相同数据相关联。知道什么可能导致这种情况吗?有关如何获取有关这些消息的更多信息的任何建议?

谢谢。

4

1 回答 1

0

您需要创建一个全局来存储您上次读取的剪贴板数据。然后,在您的情况下 WM_DRAWCLIPBOARD: 方法,与上次读取相比,仅在数据不同时处理。

于 2015-09-29T14:29:26.693 回答