이곳 게시판에 첨부를 할 수 없어서 다 보여드릴 수는 없지만,
델파이로 만들어진 어플리케이션의 어떤 폼을 마우스로 클릭하면
그 폼의 ClassName, 또 그 폼의 Parent의 ClassName, Parent의 Caption을
보여주는 프로그램을 짜보려고 이틀동안 밤새 두드려봤습니다.
별의 별 방법을 다 써보다 마우스 훅킹(Mouse Hook)과 메모리 맵드 파일을 이용해서
결국은 김영대님의 키보드 훅킹을 거의 인용해서 만들었습니다.
왜 훅킹을 쓰게 되었냐면 아시다시피 다른 어플리케이션을 클릭하면
클릭한 순간 딱 한번 Button Down 메시지를 받고 Capture도 풀려버리기 때문에
그 이후에는 제 어플리케이션쪽으로 더 이상 메시지가 오지 않기 때문입니다.
그래서 결국 훅킹 자체는 성공해서 어떤 어플리케이션에 마우스 클릭을 하든지
클릭한 스크린 좌표가 제 어플리케이션상의 Button의 Keydown 핸들러로 오게 하는데는
성공했습니다.
그런데 그 좌표를 가지고 FindVCLWindow를 하니까 nil을 리턴하는 겁니다!!!
그래서 결국은 제 어플리케이션 내부에 있는 윈도우들만 가능하더군요...
어떻게 하면 좋겠습니까? T.T
추적해보니까 다른 부분은 문제없이 매끈하게 잘 돌아가는데...
아마도 FindVCLWindow 자체가 원래 그렇게밖에 안되든지,
아니면 MouseProc에서 PostMessage(*제 어플의 버튼 핸들*,
WM_KEYDOWN, 0, 0);
(요렇게 하고 또 WM_KEYUP도 보냈음)
둘 중의 하나가 문제인 것 같은데요...
제가 글 솜씨가 엉망이라 너무 길고 지저분하지만... 도와주시면 감사하겠습니다.
제발 좀 도와주세요 T.T
델파이코리아(http://www.delphikorea.com)의 Q&A에 답변해 놓았습니다.
집이 아니라 델파이가 없어서리 소스는 보지 못했구요, 아깝더라두 전부 제쳐두고 WindowFromPoint를 사용하면 원하시는 결괄르 얻으실수 있습니다.
델코에서 답변 하고보니 발빠른 '유수'님께서 예제까징 올려 놓으셨네요 ^^.
빠르기도 하셔라~~~
스파이 같은거 맹그십니까?
(다 맹글어 지면 지도 한카피 부탁... ^^;)
-공짜를 욕심내는 지영이가..-
김일영 wrote:
> 이곳 게시판에 첨부를 할 수 없어서 다 보여드릴 수는 없지만,
> 델파이로 만들어진 어플리케이션의 어떤 폼을 마우스로 클릭하면
> 그 폼의 ClassName, 또 그 폼의 Parent의 ClassName, Parent의 Caption을
> 보여주는 프로그램을 짜보려고 이틀동안 밤새 두드려봤습니다.
>
> 별의 별 방법을 다 써보다 마우스 훅킹(Mouse Hook)과 메모리 맵드 파일을 이용해서
> 결국은 김영대님의 키보드 훅킹을 거의 인용해서 만들었습니다.
>
> 왜 훅킹을 쓰게 되었냐면 아시다시피 다른 어플리케이션을 클릭하면
> 클릭한 순간 딱 한번 Button Down 메시지를 받고 Capture도 풀려버리기 때문에
> 그 이후에는 제 어플리케이션쪽으로 더 이상 메시지가 오지 않기 때문입니다.
>
> 그래서 결국 훅킹 자체는 성공해서 어떤 어플리케이션에 마우스 클릭을 하든지
> 클릭한 스크린 좌표가 제 어플리케이션상의 Button의 Keydown 핸들러로 오게 하는데는
> 성공했습니다.
>
> 그런데 그 좌표를 가지고 FindVCLWindow를 하니까 nil을 리턴하는 겁니다!!!
> 그래서 결국은 제 어플리케이션 내부에 있는 윈도우들만 가능하더군요...
> 어떻게 하면 좋겠습니까? T.T
>
> 추적해보니까 다른 부분은 문제없이 매끈하게 잘 돌아가는데...
> 아마도 FindVCLWindow 자체가 원래 그렇게밖에 안되든지,
> 아니면 MouseProc에서 PostMessage(*제 어플의 버튼 핸들*,
> WM_KEYDOWN, 0, 0);
> (요렇게 하고 또 WM_KEYUP도 보냈음)
> 둘 중의 하나가 문제인 것 같은데요...
>
> 제가 글 솜씨가 엉망이라 너무 길고 지저분하지만... 도와주시면 감사하겠습니다.
> 제발 좀 도와주세요 T.T