얼마 전 어떤분께서 Windows에서 광클릭으로 하는 스크립트를 궁금해 하시더군요. 아시는 분은 아시겠지만 Autohotkey 를 사용하면 이런 기능들은 매우 쉽게 만들 수가 있습니다. 질문하신 분은 아마도 게임을 하는데 사용하시는 것 같더군요.

어쨌든 Autohotkey 를 사용하여 광클릭으로 하는 스크립트는 아래와 같습니다. 마우스 왼쪽 버튼을 계속 누르고 있으면 해당 부분을 광클릭 하게 되는 코드입니다. Esc 를 누르면 해당 스크립트파일이 종료 됩니다.


~LButton::

while GetKeyState("LButton", "P")

{

Click

Sleep, 5

}

return


Esc::

ExitApp


sleep 를 안 넣으면 클릭이 너무 빨라서 렉에 걸린다고 하네요. 각자 용도에 맞게 sleep 시간을 조절해 보시기 바랍니다.



Autohotkey 를 사용하면  화면의 이미지를 검색하고 클릭하는 등의 작업을 할 수 있습니다. 이러한 작업을 하기 위해서는 Autohotkey 의 ImageSearch 함수를 사용하면 됩니다.   


ImageSearch 함수를 사용하기 위해서는 먼저 찾고자 하는  이미지를 캡쳐 해야 합니다. 윈도우 키를 누른 후에 캡처라고  타이핑 해 보면 캡처 도구가 나옵니다. 캡처 도구를 실행한 후에 검색할 이미지 부분을 캡처 합니다.  제 개인적인 경험에 의하면 아래 포스팅에서 소개했던 prtscr 프로그램을 사용해서 캡처 하는 경우 autohotkey 이미지서치 기능이 정상적으로 동작하지 않는 경우가 있었습니다.


http://iamaman.tistory.com/630



그래서 저는 오토핫키 ImageSearch 기능을 사용하는 경우에는 윈도우 캡처 도구를 사용합니다. 그리고  캡쳐 완료 후에는 해당 이미지를 파일로 파일로 저장 합니다.

아래 코드 예는 구글문서의 음성 인식 마이크를 클릭하는 예 입니다. 윈도우 캡처 도구를 사용하여 마이크 모양에 대한 이미지 부분을 캡처 했고 "C:\캡처.PNG" 경로에 저장했습니다.

#NoEnv

SetWorkingDir %A_ScriptDir%

#SingleInstance Force


CoordMode,Pixel, Screen

CoordMode,Mouse, Screen


ImageSearch, FoundX, FoundY, 0, 0, A_ScreenWidth, A_ScreenHeight, C:\캡처.PNG

If ErrorLevel = 0

{

Click, %FoundX%, %FoundY% Left, 1

}  


ExitApp


위 코드를 실행해 보면 이미지의 좌측 상단  부분으로 마우스 커서가 이동하는 것을 확인할 수 있습니다.


보통의 경우 이미지  서치는 마우스클릭을 하기 위해 동작시키는 것이므로 이미지의  중간 부분을 검출에 되는 것이 편할 겁니다.

이를 위해서는 다음과 같은 코드를 사용하면 됩니다 아래 코드에서 CenterImgSrchCoords() 함수 부분은 Pulover's Macro Creator 를 사용하여 생성한 코드 부분 입니다.

에서 생성한 부분입니다.  

#NoEnv

SetWorkingDir %A_ScriptDir%

#SingleInstance Force


CoordMode,Pixel, Screen

CoordMode,Mouse, Screen


CenterImgSrchCoords(File, ByRef CoordX, ByRef CoordY)

{

static LoadedPic

LastEL := ErrorLevel

Gui, Pict:Add, Pic, vLoadedPic, %File%

GuiControlGet, LoadedPic, Pict:Pos

Gui, Pict:Destroy

CoordX += LoadedPicW // 2

CoordY += LoadedPicH // 2

ErrorLevel := LastEL

}


ImageSearch, FoundX, FoundY, 0, 0, A_ScreenWidth, A_ScreenHeight, C:\캡처.PNG

CenterImgSrchCoords("C:\캡처.PNG", FoundX, FoundY)

If ErrorLevel = 0

{

Click, %FoundX%, %FoundY% Left, 1

}


ExitApp


CenterImgSrchCoords() 함수의 코드를 확인해 보면 이미지를 로드 한 후에 가로, 세로  폭을 알아내고 해당  폭의 절반을 이미지검색 초기값에  더 해 주는 것을 확인할 수 있습니다.


위 코드를 실행해 보면 다음과 같이 마우스 커서가 검색된 이미지의 중간 부분을 클릭하는 것을 확인 할 수 있습니다.



  1. 2018.03.05 20:42

    비밀댓글입니다

    • 남성 2018.03.05 20:54 신고

      솔직히 질문이 정확히 이해가 안 되네요.
      조금 더 구체적으로 질문해 주셨으면 좋겠습니다.
      구조적으로 비정형화된 텍스트 파일을 매트랩에서 읽고 싶다는 건가요?

개인적으로 Windows 환경에서 Autohotkey 는 가장 필수적인 프로그램이라고 생각됩니다.

 

Autohotkey 이니 만큼 키보드 또는 마우스 입력을 자동화 하는 기능은 다른 어떤 언어도 따라오지 못한다는 생각 마저 듭니다.

 

Autohotkey 를 이용하여 마우스 또는 키보드 입력을 자동화 하는 경우, 자동화 스크립트가 실행되는 동안에 사용자 입력을 막아야 하는 경우가 있습니다.

 

예를 들면 마우스를 조작하는 자동화 스크립트가 동작하는 중에 사용자가 마우스 조작을 하면 의도치 않은 결과를 초래 할 수 있습니다.

 

이런 경우 오토핫키의 blockinput 이라는 명령어를 이용하면 스크립트가 돌아가는 동안에는 키보드 또는 마우스 입력을 못하도록 할 수 있습니다.

 

마우스 또는 키보드 입력이 정상적으로 돌아가도록 보장하는 거죠.

 

blockinput 에 대한 매뉴얼은 아래 주소에 있습니다.

 

https://autohotkey.com/docs/commands/BlockInput.htm#Parameters

 

위 매뉴얼을 보면 blockinput 에는 다양한 모드가 있지만 저는 가장 단순하에 On, Off 만 사용하곤 합니다.

 

마우스 또는 키보드를 자동화 하는 스크립트의 위 아래에 다음과 같이 On, Off 해 줍니다.

 

BlockInput, on

; SendMode, Send, Click, MouseMove, MouseClick, MouseClickDrag 를 사용하는 스크립트

BlockInput, off

 

이렇게 하면 키보드나 마우스 입력이 자동화 하는 동안에 사용자는 임의적인 입력을 할 수 없게 되고 안정적으로 스크립트가 동작 하게 됩니다.


+ Recent posts