클립보드 모니터링

@codemaru · March 10, 2006 · 3 min read

오피스 제품군은 대부분에는 클립보드 모니터링 기능이 포함되어있습니다.

클립보드 모니터링이란 클립보드의 변경 내용을 프로그램에서 감지하는 것을 말합니다.

클립보드를 모니터링 하는데 필요한 관련 API를 소개합니다.

HWND SetClipboardViewer(  

  HWND hWndNewViewer   // handle to clipboard viewer window  

);

클립보드를 모니터링하는 프로그램의 핸들을 등록합니다.

BOOL ChangeClipboardChain(
  HWND hWndRemove,  // handle to window to remove
  HWND hWndNewNext  // handle to next window
);

클립보드를 모니터링하는 프로그램의 체인 구조를 변경합니다.

클립보드 뷰어로 등록하게 되면 아래 메시지를 처리해 주셔야 합니다.

WM_CHANGECBCHAIN

wParam

Handle to the window being removed from the clipboard viewer chain.

lParam

Handle to the next window in the chain following the window being removed. This parameter is

NULL if the window being removed is the last window in the chain.

클립보드 체인이 변경될때 발생하는 메시지 입니다.

자신이 가지고 있는 next핸들이 removed핸들과 같은 경우에는 새로 설정해 주어야 합니다.

WM_DRAWCLIPBOARD

클립보드의 내용이 변경되는 경우에 발생하는 메시지 입니다.

이 메시지 핸들러에서 클립보드의 내용을 검사하시면 됩니다.

클립보드라는 기능이 윈도우의 초기 버전에 나온 기능인 만큼 뷰어의 구조또한 위험하게 설계되어 있습니다.

함수 후킹과 마찬가지로 뷰어 체인은 전적으로 프로그램에게 권한이 위임됩니다. 자신을 뷰어로 등록한 후에

자신의 다음 뷰어에게 반드시 WM_CHANGECBCHAIN과 WM_DRAWCLIPBOARD메시지를 포스팅 해 주어야

합니다. 그렇게 하지 않을 경우 뷰어 체인이 끊기게 됩니다.

clipmon.zip

@codemaru
돌아보니 좋은 날도 있었고, 나쁜 날도 있었다. 그런 나의 모든 소소한 일상과 배움을 기록한다. 여기에 기록된 모든 내용은 한 개인의 관점이고 의견이다. 내가 속한 조직과는 1도 상관이 없다.
(C) 2001 YoungJin Shin, 0일째 운영 중