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

Другие вопросы по тегам