2013-02-17 9 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

감사합니다. Chris. 당신은 어떻게 그것을 정상적으로 관리합니까? 받은 메시지가 서로 매우 가깝고 무시하는지 확인합니다. –

+0

예. 일반적으로 당신이하고 싶은 것은 마지막 이벤트에 반응합니다. 보통 500 밀리 초 동안 모든 것이 조용 해지면 스스로를 다시 불러야합니다. –

답변

0

마지막으로 읽은 클립 보드 데이터를 저장하려면 전역을 만들어야합니다. 그런 다음, 귀하의 경우에는 WM_DRAWCLIPBOARD : 메서드는 마지막 읽기와 비교하여 데이터가 다른 경우에만 처리합니다.