2009. 10. 22. 04:45
CGVDesktopWidget을 써보려고 했는데, 이게 위젯 답지 않게 작업표시줄에 자신의 존재감을 마구 뿌려대기에 해결해보았다. 라기보단, 말린게 틀림없다.

뭐하는 프로그램이냐면, 인자로 주는 프로그램을 실행시켜서, 그 프로그램에서 생성되는 모든 창을 위젯처럼 만들어준다. 즉, 작업표시줄에도 안뜨고 알탭으로도 선택이 안된다. 만세!

근데 아예 그렇게만 돼버리면 굉장히 곤란하니까 친절하게 트레이에 아이콘을 달아주는 센스도 있다. 아이콘을 클릭하면 모든 위젯이 맨 앞으로 달려나오고, 오른쪽 버튼으로 클릭하면 종료하겠느냐고 친절히 물어본다. 종료 방법은 PostQuitMessage()를 사용하기 때문에, 메시지 루프를 쓰지 않는 변태같은 프로그램이 있다면... 아 그 이전에 트레이 아이콘이 동작하지 않겠구나.

구현 방법은, CreateWindow를 싸그리 후킹해서 생성되는 모든 창이 WS_EX_TOOLWINDOW 속성을 갖도록 하였다. 그리고 API 후킹을 위한 DLL injection은 디버거를 붙이는 방법을 사용했기 때문에, Anti-debugger 루틴이 들어 있는 고급 어플리케이션의 경우 실패할거다.

사용 방법은 어처구니없게 쉬운데, 압축을 풀어 나오는 두 개의 파일을 같은데 놓고 실행시키고 싶은 프로그램을 거기다 끌어 놓으면 된다.

바로가기를 수정하고 싶을 땐, 바로 가기 등록정보를 열어서 바로 가기 탭의 대상 맨 앞에 풀어놓은 widgetizer의 절대경로를 적어주자. 근데 작업 디렉토리를 안건들기 때문에, 웬만하면 바로가기 프로그램과 같은 폴더에 싹 풀어놓고 맨 뒤 \자 뒤에 <widgetizer.exe" "> (<>는 치지 말고 그 안에것만 치면 된다) 라고 입력해주면 만사 ok.

소스파일도 첨부한다. 나중에 시간나면 주석과 함께 풀이에 들어가도록 하겠다.

'프로그래밍 > C' 카테고리의 다른 글

SEED Cryptography Implementation for GCC  (0) 2013.04.08
C로 CGI를 만들어 보아요  (0) 2010.05.11
2D 갤러리 cgi 완성  (0) 2010.05.11
binary graphic counter by C  (1) 2010.05.11
counter cgi  (0) 2010.05.06
일반 창을 위젯화 시키는 Widgetizer  (0) 2009.10.22