2013-02-17 154 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 – 2013-02-18 00:11:41

+0

感謝您的電子信息克里斯。你通常如何管理它。你檢查收到的消息是否非常接近,而你忽略它們? – 2013-02-18 07:29:27

+0

是的。通常你想做的事情只是對最後一件事情做出反應。這通常包括在所有事情都安靜了500毫秒左右之後自己回來。 – 2013-02-18 21:57:59

回答

0

您需要創建一個全局來存儲您上次讀取的剪貼板數據。然後,在你的情況WM_DRAWCLIPBOARD:方法,比較最後一次讀取,只有當數據不同時處理。