영한사전같은 프로그램을보면 화면안의 임의의 글자위에 마우스 커서만 갖다데면
귀신같이 읽어내는데 어떻게 하는건지 도무지 모르겠어요.
예전에 어디선가 소스를 본적이 있었는데 이제 필요해서 찾으려고 국내외
사이트를 다 뒤져도 못찾겠네요.
아시는 분 제발 좀 가르쳐 주세요.
특정 프로그램의 특정 윈도우의 변화를 계속 모니터하는 프로그램을
만들어야 하는데 위의 방법이 어려우시면
특정 윈도우의 Label 이나 Edit 같은 컨트롤의 텍스트를 읽을수 있는 방법이라도
가르쳐 주십시요.
> 영한사전같은 프로그램을보면 화면안의 임의의 글자위에 마우스 커서만 갖다데면
> 귀신같이 읽어내는데 어떻게 하는건지 도무지 모르겠어요.
>
> 예전에 어디선가 소스를 본적이 있었는데 이제 필요해서 찾으려고 국내외
> 사이트를 다 뒤져도 못찾겠네요.
>
> 아시는 분 제발 좀 가르쳐 주세요.
>
> 특정 프로그램의 특정 윈도우의 변화를 계속 모니터하는 프로그램을
> 만들어야 하는데 위의 방법이 어려우시면
> 특정 윈도우의 Label 이나 Edit 같은 컨트롤의 텍스트를 읽을수 있는 방법이라도
> 가르쳐 주십시요.
영한 사전에서 사용되는 방법은 Windows API 중에 TextOut 계열의 함수를
교체하는 방법을 사용합니다.
TextOut 이라는 함수가 있는 포인터를 자신이 만든 함수로 대체시키면
가능한 것인데요...
일단 차례를 보면요...
1. TextOut API 의 포인터를 알아낸다. ( Virtual???? 라는 함수인데 기억이..)
2. 실제 TextOut 함수를 저장하고 자신이 만든 A 라는 함수로 대체한다.
3. 마우스를 불특정 텍스트로 가져 간다..
4. 마우스가 있는 영역에 WM_PAINT 메시지를 날린다.
5. WM_PAINT 메시지를 받은 불특정 app. 는 당연히 그래픽을 갱신하게되고
이 과정에서 텍스트를 갱신하기 위해서 TextOut 함수를 호출한다.
6. 그러명 이미 TextOut 함수는 프로그램에 의해 A 라는 함수로 대체되었고
(HDC hdc, int nXStart, int nYStart, LPCTSTR lpString, int cbString)
로 선언된 함수이기 때문에 2번째, 3번째 파라메터는 찍을 위치를 나타내고
4번째 파라메터는 찍을 텍스트를 나타낸다. 그래서 마우스와의 위치를
(x,y) 와 계산해보면 현재 마우스 아래에 있는 글자가 뭔지 알 수 있다.
7. 문자 판별이 끝났으면 저장해 두었던 원래의 TextOut 에 다시 파라메터를
넘겨주면 된다.
8. 그리고 인류 공영과 민족 번영을 위해 이바지한다.
이러한 과정입니다..
도스의 Real Mode 때라면 더 간단했을 일인데.. 윈도우즈이다보니
이런 여러 과정을 거쳐야 합니다..