-
매크로 만드는 법] 3-3. wParam, lParam 을 몰라도 PostMessage 입력하는 함수오토핫키/속성 강의 2023. 5. 9. 06:42
압살맨 오픈채팅 바로가기
압살맨 유튜브 바로가기
시작
정확히 1년이 됐다. A3 스틸얼라이브 매크로 제작의뢰가 들어왔었다.
내 인생 첫 의뢰였고 존나 설레는 마음에 열심히 만들었다.
그때 PostMessage 로 Nox 앱플레이어를 비활성으로 제어하는 방법에 대해서 찾아봤었다.
근데 wParam 과 lParam 값을 찾아서 입력을 해줘야 하는 번거로움이 있었고 키가 바뀌면 매번 찾아야 하는 것이 너무 불편했었다.
물론 그것을 해결해준 param 이라는 프로그램이 있었는데 이 프로그램은 어떻게 그 값을 알려주는걸까? 가 근본적으로 궁금했다.
물론 아는만큼 보인다고 내가 아는게 없기 때문에 검색을 할 수도 없었고 당연히 궁금증은 풀리지 않은 채 마무리가 되었었다.
시간이 지나서 거의 대부분의 게임에서는 비활성 입력이 안되기 때문에 잊고 있었는데
프리메이플 제작의뢰가 들어오면서 다시 손을 댔다. 그러면서 연관배열에 param 값을 넣고 사용하는 식으로 했었는데
생각해보니 이 값을 오토핫키에서도 알아낼 수 있지 않을까 라는 생각을 다시금 하게 되었다.
이런 방법은 나름대로 편했지만 모든 키입력에서는 100개의 key 값을 추가해줘야 한다는 점에서 번거로웠다.
그래서 열심히 찾아보니
wParam 은 GetKeyVK(KeyName) 와 같았고
lParam 은 1|GetKeySC(KeyName)<<16 와 같았다.
그래서 그것을 토대로 함수를 완성시킬 수 있었다.
Send(Key) { KeyName := GetKeyName(Key) w := GetKeyVK(KeyName) SC := GetKeySC(KeyName) ControlGetFocus, ctrl, % "ahk_id" id PostMessage, 0x100, w, 1|SC<<16|0<<30|0<<31, % ctrl, % "ahk_id" id PostMessage, 0x101, w, 1|SC<<16|1<<30|1<<31, % ctrl, % "ahk_id" id }
Send("F5") 를 하면 F5 를 PostMessage 로 보낸다. 정말 편하다.
SendStr(Str) { ControlGetFocus, ctrl, % "ahk_id" id Loop, Parse, Str { KeyName := GetKeyName(A_LoopField) w := GetKeyVK(KeyName) SC := GetKeySC(KeyName) PostMessage, 0x100, w, 1|SC<<16|0<<30|0<<31, % ctrl, % "ahk_id" id PostMessage, 0x101, w, 1|SC<<16|1<<30|1<<31, % ctrl, % "ahk_id" id } }
문자열을 보낼 때는 Loop Parse 로 잘라서 하나씩 보낼 수 있다.
SendStr("hello") 를 하면 hello 를 입력하게 된다.
'오토핫키 > 속성 강의' 카테고리의 다른 글
매크로 만드는 법] 3-4 로스트아크 고고학을 통해 알아보는 이미지서치 게임에 적용 (0) 2023.12.08 매크로 만드는 법] 3-1. 게임 내 픽셀을 찾은 후 조건 만족 시 발동 feat. 메이플스토리 (0) 2022.12.19 매크로 만드는 법] 4-1. 인터넷 데이터 가져오기 API 의 활용 (0) 2022.12.15 매크로 만드는 법] 4. 인터넷에서 데이터 가져오기 WinHttpRequest (0) 2022.12.13 매크로 만드는 법] 3. 게임 매크로를 만들기 (0) 2022.12.09