剪贴板查看器:WM_DRAWCLIPBOARD有时会多次触发

时间:2013-02-17 10:21:21

标签: c# clipboard clipboardmanager

我以标准建议的方式创建了一个剪贴板查看器,编辑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生成的事件,这些事件使用相同的时间戳生成,与剪贴板中的相同数据相关联。 任何可能导致这种情况的想法?关于如何获得有关这些消息的更多信息的任何建议?

感谢。

1 个答案:

答案 0 :(得分:0)

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