안녕하세요!

시스템지기 시료입니다.


오늘은 오토핫키로 하는 비활성 클릭! 


PostMessage 


키 값 

키보드 누르기

0x100


키보드 떼기

0x101


마우스 이동

0x200


마우스 좌 누르기

0x201


마우스 좌 떼기

0x202


마우스 좌 더블클릭

0x203


미우스 우 누르기

0x204


마우스 우 떼기

0x205


마우스 우 더블클릭

0x206




아래는 스크립트입니다.


그대로 복사해서 쓰셔서 녹스 플레이어 부분을 해당 앱플레이어 이름으로 변경하시면됩니다.


스크립트

Gui, Add, Button, x12 y29 w100 h30 gisGo, 시작 ;시작버튼에 isGo라는 변수를 대입

Gui, Add, Button, x12 y79 w100 h30 gReStart, 재 실행 ;재 실행버튼에 ReStart 라는 변수를 대입

Gui, Show, x127 y87 h129 w130,


isGo:

ClickX:=100 ;클릭할 좌표X

ClickY:=100 ;클릭할 좌표Y

lparam:=ClickX|ClickY<<16 ;PostMessage는 좌표값을 16진수로 받습니다.

PostMessage,0x201,1,%lparam%,,녹스 플레이어 ;0x201,1 클릭,1 입니다.

PostMessage,0x202,0,%lparam%,,녹스 플레이어 ;0x202,0, 클릭을 때다 입니다.

Sleep, 1000

return



Restart:

ExitApp

return


GuiClose:

ExitApp

return




Posted by 시료
,

안녕하세요, 시스템지기 시료 입니다

이번에는 오토핫키로 녹스 앱플레이어 안의 이미지를 비활성으로 찾아보려고해요.


녹스는 무조건 그래픽 모드를 스피드 모드로 설정을 하셔야 비활성 이미지서치가 먹히더라구요,

이게 PC마다 차이점이 있더라구요 ㅎ


 


녹스 안의 이 이미지를 비활성으로 확인하고 좌표로 확인하는 작업을 할꺼에요 !


스크립트도 업로드했으니 우리 천천히 따라해봐요 ㅎㅎ


 스크립

 Gui, Add, Button, x12 y29 w100 h30 gisGo, 시작 ;시작버튼에 isGo라는 변수를 대입

Gui, Add, Button, x12 y79 w100 h30 gReStart, 재 실행 ;재 실행버튼에 ReStart 라는 변수를 대입

Gui, Show, x127 y87 h129 w130, 

return


#Include Gdip.ahk

#Include Gdip_ImageSearch.ahk

#Include Search_img.ahk


isGo: ;시작버튼누르면 시작되게

WinGet,Nox,ID,녹스 플레이어


if(Search_img("OverHit.bmp",Nox,x,y)) ;OverHit 라는 이미지를 찾습니다.

{

MsgBox,찾으신좌표는 x=%x% y=%y% 입니다. ;찾고난후 메세지박스에 해당좌표를 표시합니다.

}

return


ReStart: ;재 실행버튼을 누르면 프로그램 재시작되게

Reload


GuiClose:

ExitApp

return



이렇게 작성하고 나면

요로코롬 된다지요 ㅎㅎ



이제 연습만이 남았지요 ??

연습해서 ! 비활성화로 가능하게끔!!! 노력노력노력!!!



인 클라우드

Gdip.ahk

Gdip_All.ahk

Gdip_ImageSearch.ahk

Search_img.ahk

Posted by 시료
,

안녕하세요 시료입니다.

 

어김없이 퇴근 후 매크로를 만드는 도중

갑자기 오토핫키 초보 분들에게 알리고자 하는 부분이 생겨서 이렇게 강좌를 남깁니다.

 

요즘 goto, gosub 를 쓰면 손절이라는 말 들어보셨나요?

 

 

네, 저 시료는 이미 안쓰고 있었죠,

대안으로 쓸수있는걸 알려드리려고 합니다

 

일단 goto, gosub의 문제점을 먼저 알려드릴꼐요

말그대로 메모리가 계속 차는겁니다.

 

일단 진행속도가 틀립니다.

 

당연히 처음은 똑같습니다.

하지만 매크로가 뭡니까?

자동화 시스템 아닙니까 ㅎ

 

시간이 오래되면 오래될수록 메모리가 쌓여 작업속도가 현저히 떨어집니다.

 

이런 경우를 대비해 요즘은 function 함수를 사용합니다.

 

아래를 보시죠!_!

 

예제1

function이름()

{

 SetTimer, a,on

 sleep, 500

 SetTimer, a,7200

}

 

 

보통은 goto를 사용하기위해

 

tset:

{

 send, a

 sleep, 500

 goto, 이름  ; 이름 으로 보내다

}

return

 

이름:

{

 내용

}

return

 

이런식으로 사용됩니다. 

하지만 요즘은 예제를 보시는것과 같이 펑션을 사용하시면

goto를 사용안하고도 가능합니다.

 

예제1 번으로 보내는 예문을 들어보겠습니다

 

Button시작:

{

 send, a

 sleep, 500

 function이름() ;function이름() 으로 보내다

}

 

 

차이를 아시겠나요??

goto, 이름 => function이름()

이렇게 변경됬습니다.

 

이렇게 사용하시면 작성중이신 스크립트도 더 전문적으로!

더 깨끗하게 보일수 있습니다!

당연히 속도도 더빨라집니다!

Posted by 시료
,

 

반갑습니다 시료입니다.

 

오늘은 Settimer

여러분들이 이거 멀티쓰레드인가?

아닌가? 고민하는 부분이죠

흡사 멀티쓰레드로 스크립트를 구현하시는 분들도 많으시구요.

 

장점 단점
여러 함수를 시간 차를 주며 사용가능하다  여러 함수를 사용하다 꼬임이 발생하여 무한 딜레이가 발생될 확률이 있다.

 

간단하게 예문을 들어보겠습니다

 

먼저 a와 b함수가 있습니다.

 

오토핫키 L,BASIC 특성상 두가지를 돌아가면서 실행 시키지 못합니다

말그대로 멀티쓰레드는 불가능합니다.

 

스크립트
a:
}
 Send, {a}
 slepp, 500
 Send, {a}
}
return
 
b:
}
 Send, {b}
 slepp, 500
 Send, {b}
}
return

위 스크립트를 셋타이머를 통하여 멀티쓰레드 인듯 아닌듯 일정 시간간격을 두고 두번 실행해보겠습니다.

 

버튼 Start 가 있다는 가정하에

스크립트
ButtonStart:
{
 Settimer, a, 500 ; a는 함수명,500은 딜레이
 Settimer, b, 500 ; b는 함수명,500은 딜레이
}
a:
}
 Send, {a} ; 키보트 a를 타이핑 한다
 Slepp, 500 ; 딜레이 500 = 0.5초 1000 = 1초
 Send, {a} ; 키보트 a를 타이핑 한다
}
return
 
b:
}
 Send, {b} ; 키보트 b를 타이핑 한다
 Slepp, 500 ; 딜레이 500 = 0.5초 1000 = 1초
 Send, {b} ; 키보트 b를 타이핑 한다
}
return

 위처럼 쓰게되면

키보드 타이핑 a과 b를 aabb로 0.5초마다 실행됩니다.

멀티쓰레드? 같은? 아닌것 같은? 느낌으로 사용할수 있게됩니다.

 

  1. Settimer,a,500

  2. 명령어,함수명,딜레이

 

Posted by 시료
,