我以标准建议的方式创建了一个剪贴板查看器,编辑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生成的事件,这些事件使用相同的时间戳生成,与剪贴板中的相同数据相关联。 任何可能导致这种情况的想法?关于如何获得有关这些消息的更多信息的任何建议?
感谢。
答案 0 :(得分:0)
您需要创建一个全局来存储上次读取的剪贴板数据。然后,在您的情况下WM_DRAWCLIPBOARD:方法,与上次读取比较,仅在数据不同时进行处理。