아마 FPS 게임 쪽에 쓰시는분들이 대다수 일꺼라 생각이 듭니다.
그러므로 FPS 게임 기준으로 적겠습니다.
MouseMove 명령어를 사용하면 마우스가 돈다고 해야할까요? 하늘을 보거나, 땅을 보거나... 원하는 곳이 아닌 이상한곳으로 가버리게 되죠...
원인은 설명하자면 깊숙하게 들어가야하고... 해결법은 mouse_event 를 쓰시면됩니다.
mouse_event 는 windows api 입니다. (windows api 란? 오토핫키 명령어처럼 윈도우 명령어라고 생각하시면 됩니다.)
DllCall 문법은 DllCall("[DllFile\]Function" [, Type1, Arg1, Type2, Arg2, "Cdecl ReturnType"]) 입니다.
자세하게 알아보고 싶으신분은 https://autohotkey.com/docs/commands/DllCall.htm 여기로 가시면 됩니다.
mouse_event api 사용 문법은 https://msdn.microsoft.com/ko-kr/library/windows/desktop/ms646260(v=vs.85).aspx 여기서 확인하시면됩니다.
설명은 여기까지 하고 실전 코드를 적어드립니다.
DllCall("mouse_event", uint, 1, int, 100, int, 100, uint, 0, int, 0)
이렇게 적어주시면 현 좌표를 0,0 기준으로 우측아래서 100, 100 으로 이동합니다.
(모니터 기준, 프로그램 기준이라고생각하시면 안됩니다.)
이제 FPS에서 사용하는 알고리즘을 알려드리겠습니다.
MouseGetPos, MouseX, MouseY ; 현 마우스 좌표를 MouseX, MouseY 변수에 저장합니다.
/* 만약 이동해야될 좌표가 300, 300이라고 가정하면 */
DllCall("mouse_event", uint, 1, int, 300-MouseX, int, 300-MouseY, uint, 0, int, 0)
한국어로 정리하자면 이동해야될곳 - 현좌표 입니다.
처음부터 바로 응용코드를 넣지마시고 단순히 100,100 좌표로 이동하는 mouse_event 를 구현해보시면 이해되실꺼라 생각합니다.
실제 다이얼로그를 기준으로 하면 다이얼로그 사이즈를 위 비율에 맞추어 계산해야 하는건가요?