Просмотр буфера обмена: WM_DRAWCLIPBOARD иногда срабатывает много раз
Я создал средство просмотра буфера обмена стандартным предложенным способом, редактируя 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 ответ
Вам нужно создать глобал для хранения ваших последних прочитанных данных буфера обмена. Затем, в вашем случае, WM_DRAWCLIPBOARD: метод, сравните с последним прочитанным, обрабатывайте только тогда, когда данные отличаются.