2013-02-17 1 views
0

Я создал средство просмотра буфера обмена в стандартном предлагаемом способе редактирования WndProc следующим образом.Средство просмотра буфера обмена: WM_DRAWCLIPBOARD иногда срабатывает много раз

  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

"It Happens" - F. Gump –

+0

Спасибо за то, что он сообщил Крис. Как вы обычно это понимаете. Вы проверяете, являются ли полученные сообщения очень близкими друг к другу, и вы игнорируете их? –

+0

Да. Обычно то, что вы хотите сделать, реагирует только на последнее событие. Это обычно включает в себя призыв себя обратно после того, как все было тихо на 500 мс или около того. –

ответ

0

Вам необходимо создать глобальное хранилище для хранения последних данных в буфере обмена. Затем, в вашем случае WM_DRAWCLIPBOARD: метод, сравните с последним прочитанным, только процесс, когда данные разные.

Смежные вопросы