본문 바로가기

오토핫키

반응형

안녕하세요. 아마 2강까지 진행하셨다면 의아한 것을 발견하셨을지도 모릅니다.

그것은 1강에서 마우스 클릭에 대해서 배웠다면 2강에서는 마우스 무브에 대해서 배웠다는 것인데

그렇다면 마우스에 관련된 다른 코드도 있지 않을까? 하는 의심말입니다.

 

결론을 말씀드리자면 일단 있습니다.

저흰 마우스를 가지고 클릭과 이동만 하는것이 아니기 때문이죠.

드래그를 한다거나 정보만을 가져오는 등 여러가지 코드도 존재합니다.

 

그럼 천천히 원래 배운 것부터 다시 알아가보도록 하겠습니다.

 

1. MouseClick

ex : MouseClick [, WhichButton, X, Y, ClickCount, Speed, DownOrUp, Relative

제일 처음에 배웠던 것으로 정확히 자주 사용하는 것만 빠르게 배우고 넘어갔던 것으로 기억하고 있습니다.

하지만 1강에서 배웠던 것만으로도 많은 것을 할 수 있을지 모르지만 더욱 많은 지식을 탐하는 분에게는

다른 방법으로도 사용할 수 있다는 것을 알려드리는 것이 좋겠죠.

 

일단 저희가 배웠던 것을 다시 떠올려봅시다.

MouseClick, left

제일 기본적인 것으로 그저 왼쪽 클릭 한번 하는 것에 불과합니다.

 

MouseClick, left, 300, 200

하지만 뒤에 좌표를 붙여줌으로서 클릭 밖에 못했던 이 것이 이동을 하여 클릭하는 것으로 변경됩니다.

그리고 그 다음에 몇 번을 클릭할 것인지, 속도와 지속적인 버튼 다운에 대해서 설정할 수 있습니다.

 

그렇다면 이 코드는 왼클릭과 우클릭밖에 못하는 코드였을까요?

그것은 아닙니다.

 

마우스에는 좌클릭과 우클릭 이외에도 가운데 휠 버튼이 존재합니다.

그렇다면 이 휠 버튼을 움직여볼까요?

 

MouseClick, WheelUp, , ,2

이것은 무엇을 하는 코드일까요?

전의 내용을 기억하고 계신다면 보자마자 느낌이 오실지 모르겠지만

그저 휠 업을 2칸 올린다는 소리입니다.

 

그렇다면 아래로 내리려면 어떻게 해야할까요?

MouseClick, WheelDown, , ,2

저 혼자 북치고 장구치고 있지만 당연히 이렇게 하면 됩니다.

하지만 마우스 클릭을 반복하기 위해 빈 공간을 '반점'으로 넘어가는 것에 불편함을 느끼실 수 있습니다.

그걸 위한 해결책도 존재합니다.

 

바로 무한적으로 반복하던 'Loop'를 사용하는 것입니다.

아니 'Loop'는 횟수 제한 없이 반복하는 것이 아닌가? 하는 생각이 드실지 모르겠지만

사실 이것은 저희가 제한을 주지 않아서 그렇지 반복 횟수를 설정해 줄 수 있는 것이었습니다.

 

그렇다면 이것을 어떻게 사용하면 저 뒤에 불편하고 짜증이 날거같은 빈 공간 때우는 반점을 없앨 수 있을까요?

loop, 2
	MouseClick, WheelUp

정말로 이것만으로 끝납니다.

아무 부담 없이 깔끔하게 끝나죠.

 

하지만 다른 언어를 배워보신 분이라면 여기서 다른 것을 떠올렸을수도 있습니다.

그것은 왜 For문을 사용하지 않는가? 에 대한 것이죠.

하지만 그 것은 여기서 다룰 것이 아니라고 생각합니다.

 

다음에 반복문을 배울 때 만나보도록 하죠.

'Relative' 의 사용법은 아래에서 설명드리겠습니다.

 

2. MouseMove

ex : MouseMove, X, Y [, Speed, Relative]

2강에서 배우셨던 마우스 이동입니다.

사실 클릭을 배우셨다면 필요가 없을지도 모르겠지만 3D게임에서 화면의 시점을 바꿀 때 사용할 수 있죠.

혹은 어느 게임에서 이미지 서치를 사용하여 메모리 핵을 사용할 때도 사용하실 수 있을지 모르구요.

일단 저같은 경우에는 에임핵으로는 사용해본적이 없었습니다.

어느 싸움넷에서 나온 FPS에서 당당하게 실버를 받았기에 생각도 나지 않았죠.

 

일단 잡담은 그만두고 이 곳에서는 클릭과 다르게 매우 적은 개수의 변수가 들어갈 수 있습니다.

MouseMove, 300, 200

제일 기본적으로 (300, 200)의 좌표로 이동하는 것부터 해서

 

MouseMove, 300, 200, 50

속도도 정해줄 수 있죠.

 

하지만 의문이 하나 드실겁니다.

마우스 클릭에서부터 있던 'Relative'는 대체 무엇일까? 하고요.

하지만 의외로 간단합니다.

 

MouseMove, 300, 200, 50, R

이런 식으로 'R' 을 적어주면 현재 마우스의 위치에서 오프셋으로 처리되어 이동하게 됩니다.

라고 설명하면 많이 어려울테니 간단하게 설명해드리겠습니다.

 

예를 들어서 저 'R'이 없다면 윈도우 화면 중에서 고정 좌표 300, 200으로 이동하게 될것입니다.

하지만 저 'R'이 생기게 되면서 현재 마우스의 위치를 파악해서 (nx, ny)로 기록하여

(nx+300, ny+200)의 좌표로 이동하게 되는 것입니다.

 

즉 현재 마우스 위치에서 300, 200을 더한 값만큼 이동합니다.

사실 이것이 설명만으로 힘드니 직접 코딩을 한번 해본 뒤 실행해보는 것도 나쁘지 않습니다.

 

하지만 완벽한 파악이 끝나기 전까지 'loop' 같이 무한정으로 반복하는 코드 안에 넣진 말아주세요.

 

3. MouseClickDrag

ex : MouseClickDrag, WhichButton, X1, Y1, X2, Y2 [, Speed, Relative]

아, 드디어 나왔습니다. 처음보는 것이죠?

제 강좌에는 여태 나온적이 없으며 앞으로도 못 볼 내용입니다.

왜냐하면 제가 사용하지 않기 때문이죠.

 

이것은 말 그대로 드래그를 해주는 것입니다.

하지만 드래그가 어디에 쓸모있겠습니까? 그쵸.

 

하지만 의외로 쓸모가 있었습니다.

드래그를 계속 한다는 것은 이 코드가 실행되는 동안에는 클릭이 눌러지고 있는 상태이며

그렇다는 것은 FPS에서 총의 반동만 안다면 헤드라인을 긁는 프로그램도 만들 수 있다는 것이죠.

 

이것을 이미지 서치를 한다면 특정 이미지가 보였을 때

헤드라인을 긁어버리는 극악무도한 프로그램도 만들 수 있을겁니다.

 

라는 것은 사실 너무 과몰입이구 3D게임부터는 이미지 서치만으로는 할 수 없습니다.

요즘 광원같은 것이 들어가서 색의 변화때문에 이미지 서치로 감지를 할 수 없기 때문이죠

 

그래도 일단 먼저 사용법을 알아보도록하겠습니다.

MouseClickDrag, Left, 100, 100, 800, 800

먼저 이렇게 보신다면 감이 안 잡힐수도 있습니다.

하지만 설명을 들으신다면 금방 이해하실수도 있습니다.

 

먼저 처음보는 것이 있다면 위에선 (X, Y)로 끝났던 것이 (X1, Y1), (X2, Y2)로 짜증나게 증식했다는 것이죠.

'X'랑 'Y'가 커플마냥 붙어다니는 것도 짜증나는데 그것이 둘로 증식했습니다.

 

이것이 2개가 된 것에는 이유가 있습니다.

드래그를 한다면 일단 시작하는 좌표에서 클릭을 시작한 뒤 끝나는 좌표까지 이동해야하기 때문이죠.

그렇기 때문에 (X, Y)좌표를 2개 구해서 1번 좌표에서 2번 좌표까지 드래그를 하는겁니다.

 

시작 좌표 하나만 만들어두고 끝나는 좌표를 안 만들어 둔다면 그건 그냥 클릭이지 드래그가 아니잖습니까

 

그렇다면 현재 마우스 위치에서 원하는 값만큼 이동하려면 어떻게 해야할까요?

 

MouseClickDrag, Left, , , 300, 300, 50, R

그냥 여태 배운거 다 써먹으면 됩니다.

값이 안 들어 갈 곳에는 공백으로 '반점'을 찍어주시고 좌표를 찍은 뒤

마우스 속도는 알아서 설정하시고 'R'만 박아주시면 자신의 현재 마우스 위치에서 이동하겠죠?

사실 해보진 않았지만 이론상으론 그러니 될거라고 믿습니다.

 

4. MouseGetPos

ex : MouseGetPos, [OutputVarX, OutputVarY, OutputVarWin, OutputVarControl, Flag]

와, 이번에도 처음 보는 코드입니다. 이 코드를 적는데 Output이 얼마나 많은지 손가락이 꼬였었습니다.

이건 저도 처음 봤습니다. 쓸 필요를 느낀적이 없어서 따로 찾아본 적도 없었거든요.

하지만 이런것도 있다는 것을 안다는 것 자체가 매우 중요한 것입니다.

그래서 잠시 다른 곳에서도 정보를 찾아봤습니다.

영어로 된 것을 번역기 돌려도 모르는건 모르겠더군요.

 

일단 빗대어 설명하자면 'G매크로'에서 마우스 좌표정할때 옆에다가 좌표 보여주는 기능과 흡사한것 같습니다.

MouseGetPos, 변수A, 변수B
Msgbox, X : %변수A% Y : %변수B%

이러한 코드를 짯을 때 자신의 마우스 좌표가 메세지 박스에 뜨는 것을 볼 수 있습니다.

사실 이해가 파박! 하고 오려면 직접 한번 쳐보는 것이죠.

 

'변수A'와 '변수B'는 예시로 든 것이라 그냥 다른 값으로 바꿔서 적어도 좋습니다.

대략 이것으로 마우스 관련 코드에 대해서 알아보았습니다.

저도 새로운 것을 알게되어 정말 유익한 시간이었다고 생각합니다.

겉으론 말이죠

댓글
반응형

안녕하세요. 이번 강좌에서는 하나의 행동을 계속 반복하는 매크로를 만들어 볼 생각입니다.

게임을 하다보면 같은 작업을 계속 반복하는 일이 발생합니다.

수동으로 돌아가고 변수가 많다면 모르겠지만 요즘 게임은 변수가 적은편이여서 반복적인 요소가 보이는데

자신이 어떻게 반복하고 있는지 알고있다면 하나의 행동을 작성해서 무한으로 반복시켜주면 됩니다.

init:
start := false
Cool := 0.0

CoordMode, Pixel, Screen
CoordMode, Mouse, Screen

loop{
	if(start){	; 전투 시작 전
		Sleep, 1000
		Send {4}
		sleep, 1000
		MouseMove, 960, 1080
		sleep, 500
		MouseClick, Left,,,,D
		sleep, 500
		mouseclick, left,,,,u
		sleep, 500
		Send {2}
		Random, Cool, 7000, 10000
		sleep, Cool
		send {PgUp}
		Random, Cool, 7000, 10000
		sleep, Cool
		send {PgUp}
		Random, Cool, 7000, 10000
		sleep, Cool
		send {PgUp}
		Random, Cool, 7000, 10000
		sleep, Cool
		send {PgUp}
		Random, Cool, 7000, 10000
		sleep, Cool
		send {PgUp}
		Random, Cool, 7000, 10000
		sleep, Cool
	}
}
return

F5::
start := true
SoundBeep, 750, 200
return


F6::
start := false
SoundBeep, 550, 200
return

제가 보통 모바일 게임을 하거나 다른 프로그램을 반복적으로 사용할 때 자주 쓰는 코드를 가져왔습니다.

보통 여기서 입맛에 맞게 매일 수정해가며 사용하고 있습니다.

그렇다면 이 프로그램은 어떻게 작동하는 것일까요?

 

컴퓨터 코딩에 익숙하지 않은 사람들이 본다면 이 코드만으로도 혼잡이 올지도 모르겠지만

생각보다 많이 쉬운 내용이니 한번 보시면 쉽게 이해가 가능할겁니다.

 

1. init:

프로그램이 작동중이라면 계속 돌아가는 역할을 하는 것으로 보입니다.

사실 예전에 익혔던 내용이지만 몇 년간 사용하지 않아 자세하게는 설명드리지 못합니다.

프로그램이 시작한 뒤 꺼질때까지 무한정으로 반복해주거나 혹은 다른 프로그램 키를 입력받았을 때

init가 실행되는 것일 수도 있습니다.

 

2. start, cool

'start'는 1강과 같은 용도로 사용됩니다.

반복되는 것을 끝낼 때 사용합니다.

 

하지만 'cool'을 본적이 없습니다. 어디에 사용하는 것일까요?

요즘 모바일 게임에서 같은 시간으로 계속 반복하면 정지를 먹는 일이 있습니다.

그것을 피해가기 위해서 랜덤으로 값을 뽑아 저장해 줄 변수가 하나 필요했습니다.

그래서 하나를 생성해 만들어 두었으며 '정수'면 시간이 너무 딱딱 맞아 정지를 먹을까봐 '실수'로 설정했습니다.

사실 이렇게 해도 정지를 먹을 것 같습니다.

 

3. CoordMode, Pixel, Screen / CoordMode, Mouse, Screen

자신의 용도에 맞는 것을 넣지 않으면 문제가 하나 발생합니다.

그것은 프로그램이 맨 위에 선택되어 있지 않다면 인식이 되지 않는다는 것입니다.

그래서 스크린에 보이는 것을 인식한다는 의미로 넣어주는 것입니다.

 

하지만 현재 매크로에서는 사실상 필요없는 코딩입니다.

애초에 키 입력을 반복하려면 그 반복하려는 프로그램이 맨 위에 선택되어 있어야하기 때문이죠.

따로 나중에 이 코딩에서 이미지 서치같은 것을 안하신다면 굳이 넣을 필요가 없습니다.

 

자세한 내용은 이미지 서치를 사용하게 되었을 때 설명드리겠습니다.

 

4. Send {Key}

이 것은 매크로를 작성할 때 매우 자주 사용하게 되실겁니다.

'Send'는 사전적 내용으로 '보내다'라는 의미를 가지고 있습니다.

네, 그렇습니다. 말 그대로 컴퓨터에 {} 안에 든 내용을 전송해줍니다.

예를 든다면 Send {4} 를 적으면 코드를 실행했을 때 '4' 를 입력해줍니다.

 

그럼 PageUp 같은 것은 입력하지 못하나요?

당연히 못하지 않습니다.

 

https://www.autohotkey.com/docs_1.0/commands/Send.htm

본 링크는 오토핫키에서 제공해주는 커맨드 키입니다.

아래에 살짝 내리시면 표가 있는데 그 안에 여러가지 어떠한 값을 넣으면 무엇이 선택되는지 적혀있습니다. 영어로

여기서 자신이 원하는 키를 찾아서 입력하시면 됩니다.

 

5. MouseMove, X, Y, Speed

1강에서 'Click'을 배웠다면 2강에서는 'Move'를 배웁니다.

'Move'는 움직인다는 의미를 가지고 있죠?

간단하게 'X, Y' 좌표로 이동한다는 의미를 가지고있습니다.

'Speed' 는 사실 저는 사용하지 않습니다만 화면에서 이동하는 속도를 조절할 수 있습니다.

값의 범위는 '0~100'으로 높을수록 느려집니다.

 

6. SoundBeep, Frequency, Duration

간단한 소리를 내주는 코드입니다.

제가 버튼을 눌렀는지 안 눌렀는지 확인하기 위해서 추가되었습니다.

컴퓨터가 렉걸렸을 때 누르면 안 눌리는 경우가 있는데 그럴 경우 아무 반응이 없다면 확인하기 힘들기 때문이죠.

 

이 코드는 약간의 난이도를 가지고 있습니다.

'SoundBeep, 주파수, 지속시간' 으로 왠만한 전공분야 뺨칠거같은 포스를 품기는 이 코드는

혼자 쓸거라면 쓰는 것만 쓰기때문에 어렵지 않습니다.

저 것으로 노래를 만들어서 노셔도 되지만 그런 작업을 하느니 그냥 음악 프로그램으로 음악을 만드시면 됩니다.

 

주파수는 제가 사용하는 주파수와 같게 사용하면 별 문제 없이 쉽게 버튼이 눌렸다는 것을 확인하실 수 있습니다.

그러나 다른 주파수도 설정해보고 싶으신 분들을 위해 범위는 '37~32767' 이라는 것을 알려드립니다.

 

지속시간은 단위가 'ms'로 1000을 적으면 소리가 1초동안 들립니다.

 

1강에서 잡다한 것들이 많다보니 2강에선 딱히 할 것이 없었습니다.

하지만 다들 자주 사용하는 것들이니 외우기보단 그냥 메모장에 적어두고 자신이 필요할 때 꺼내쓰면 좋습니다.

물론 혼자 쓴다면 말이죠.

 

전문적으로 하신다면 검색하실 때 구글에 'Autohotkey code' 를 적으시면

그 코드에 대한 전문적인 정보를 볼 수 있습니다. 영어로

 

그러면 다음 강좌에서는 이미지 서치 기능에 대해서 설명드리겠습니다.

댓글
반응형

안녕하세요. 이번 강의에서는 연산자에 대해서 알아볼 생각입니다.

사실 여러분은 연산자를 처음 보시는 것이 아닙니다.

미래에 쓸지도 모르는 수학을 배우면서 학교에서 탈출하시기 전까지 보셨을겁니다.

하지만 프로그래밍에서는 학교에서 탈출해서도 못본 연산자를 볼 수 있습니다.

 

1. 산술 연산자

일단 제일 먼저 간단하게 산술 연산자라는 것을 보실 수 있습니다.

수학에 제일 기본적으로 사용되는 것이기에 이 연산자는 학교에서 탈출한 여러분이라면 다 아실 수 있습니다.

 

+ 더하기
- 빼기
* 곱하기
/ 나누기
% 나머지

아마 다들 한번씩은 보신 적이 있으실겁니다.

가끔 가다가 '%' 를 수학에서 보신적이 없다고 생각하신 분들이 계시지만

사실 저도 본적 없습니다.

 

'+' 는 다들 아시다시피 그저 더하는 것입니다.

프로그래밍에서도 5 + 3 이런 식으로 들어갑니다.

 

'-' 는 값을 빼는겁니다.

5 - 2 는 무엇일까요? '3' 입니다. '3' 이 이제 변수에 들어가는 겁니다.

 

'*' 는 '×' 가 더 익숙하실테지만 '*' 을 사용합니다.

그냥 곱하는 겁니다.

 

'/' 는 나누어주는 것입니다. '÷' 를 학교 교과서에서 보셨겠지만 프로그래밍에선 '/' 를 사용합니다.

그냥 나누어주는 것이지만 결과를 나타낼 때 약간 난해한 것이 있습니다.

오토핫키에서는 간단한 매크로만 만들면 영원히 안쓸지도 모를 자료형이라는 것이 존재합니다.

그 자료형에 따라서 소수점 아래의 값까지 출력이 될 수도 있지만 그 아래의 값을 없애버릴 수도 있습니다.

하지만 제 강좌에서는 등장하지 않으니 걱정하지 않으셔도 괜찮을겁니다.

아마 등장하지 않을거에요.

 

'%' 는 나눈 값의 나머지를 구하는 연산자입니다.

초등학생 시절 나머지 값을 구하는 수학을 해보신 적이 있으실겁니다. 아님 말고

5 / 2 = 2…1 이라는 식이 기억나시나요?

저 식의 값은 2이며 나머지는 1이라는 답을 적은 기억이 새록새록 나실겁니다.

'/' 는 2를 구한다면 '%' 는 1을 구하는 것입니다.

※ 물론 5 / 2 = 2.5 로 '/' 를 쓰면 2가 아니라 2.5가 출력됩니다.

 

 

2. 대입 연산자

변수를 생성하시고 그 변수에 값을 넣으시려면 대입연산자가 필요합니다.

산술 연산자만큼 많이 나오는 연산자로 자주 사용하실 예정이십니다.

 

:= 대입
.= 누적 대입

많이 사용하는 만큼 많은 연산자가 존재하는 것은 아닙니다.

하지만 예전엔 안됬는데 지금은 되는 것이 있죠.

 

':=' 은 일반적인 대입입니다.

변수에다가 값을 저장하는 것으로 'a := 5' 는 'a' 안에 '5' 라는 값이 있다는 것이죠.

하지만 '=' 로도 같은 역할을 수행할 수 있습니다.

큰 차이는 모르겠지만 어느날 다른 언어 쓰듯이 썼더니 되더군요.

저희는 전문적이지 못해서 그냥 넘어갈 뿐이죠.

 

'.=' 은 누적 대입이라는 것입니다.

저는 사용한 적은 없어서 정확한 사용법은 모르겠지만

누적 대입이라면 변수에 값이 쌓인다는 것이니 배열로 쌓일지 아니면

산술 대입 연산자의 역할을 해주는 것인지 잘 모르겠습니다.

 

 

3. 비교 연산자

IF문을 사용할 때 자주 사용하는 연산자입니다.

비교 연산자의 결과는 항상 TRUE or FALSE 를 출력합니다.

 

A > B A가 B보다 크다.
A < B A가 B보다 작다.
A >= B A가 B보다 크거나 같다.
A <= B A가 B보다 작거나 같다.
A = B A가 B와 같다.
A <> B A와 B는 다르다.

이 연산자도 수학을 배우다보면 보신적이 있으실겁니다.

사실 언제 배웠는지 기억이 나진 않지만 처음 배울 때 처음 본 느낌이 아니더군요.

 

'A > B' 는 값을 비교해 결과를 출력합니다.

'A' 가 'B' 보다 크다는 것이 맞다면 'TRUE' 를, 아니라면 'FALSE' 를 출력합니다.

 

'A < B' 또한 위와 비슷합니다.

'A' 가 'B' 보다 작다는 것이 맞다면 'TRUE' 를, 아니라면 'FALSE' 를 출력합니다.

 

'A >= B' 는 한가지 중요한 사실이 있습니다.

'A => B' 이런식으로 사용할 수 없다는 것이죠.

항상 '=' 가 '>' 뒤에 와야합니다. 그래야지만 '크거나 같다' 라는 것을 확인할 수 있습니다.

'A' 가 'B' 보다 크거나 같다면 'TRUE' 를, 아니라면 'FALSE' 를 출력합니다.

 

'A <= B' 또한 위와 비슷합니다.

'A' 가 'B' 보다 작거나 같다면 'TRUE' 를, 아니라면 'FALSE' 를 출력합니다.

 

'A = B' 는 'A' 와 'B' 가 같다면 'TRUE' 를, 아니라면 'FALSE' 를 출력합니다.

'A <> B' 는 'A' 와 'B' 가 다르다면 'TRUE' 를, 아니라면 'FALSE' 를 출력합니다.

하지만 'A <> B' 가 아닌 'A != B' 로 나타낼 수도 있습니다.

'!' 는 부정으로 반대를 의미합니다.

즉 같다는 것의 반대는 다르다를 의미하기 때문에 같은 의미로 사용할 수 있습니다.

 

4. 산술 대입 연산자

+= 원래 값에 더해서 대입
-= 원래 값에 빼서 대입
*= 원래 값에 곱해서 대입
/= 원래 값에 나눠서 대입

처음 보는 것에 당황하실 수도 있겠지만 전혀 어려운 것이 아닙니다.

그저 생소할 뿐이죠.

 

'A += B' 라는 형태로 사용하는 이것은 결국 풀어보면 'A = A + B' 라는 형태가 됩니다.

즉 'A' 의 값은 '5' 였으며 'B' 의 값이 '3' 이라면 'A = 5 + 3' 이라는 것으로 풀어볼 수 있습니다.

그렇게 되어 'A' 의 값은 '8' 이 되는 것이죠.

 

다른 산술 대입 연산자도 다르지 않지만 하나의 예시를 더 들어보자면

'A *= B' 라는 형태로 사용하는 이것 또한 풀어보면 'A = A * B' 라는 형태가 됩니다.

이 두 변수의 값이 위와 같다면 'A = 5 * 3' 이라는 것으로 풀어볼 수 있습니다.

그렇게 되어 'A' 의 값은 '15' 가 됩니다.

 

5. 논리 연산자

&& 그리고, AND
|| 또는, OR
! 부정, NOT

프로그래밍에서는 논리 연산자라는 것이 존재합니다.

이것 또한 처음 보는 것이지만 어렵지 않습니다.

 

'&&' 는 AND 라는 의미로 보통 'TRUE && TRUE' 는 'TRUE' 라는 값을 출력하죠.

어디에 사용하는가 한다면 2가지의 조건 모두 'TRUE' 값을 받아야 하는 경우에 사용합니다.

즉 'if(A=5&&B=3)' 이라는 IF문을 사용합니다.

이러할 때 'A' 의 값은 원래 '5' 였고, 'B' 의 값이 '3' 이었다면 'TRUE AND TRUE' 가 되어 'TRUE' 를 출력합니다.

하지만 'A' 의 값이 '3' 이었고, 'B' 의 값은 그대로 '3' 이라면 'FALSE AND TRUE' 가 되어 'FALSE' 가 됩니다.

반대로 'A' 의 값이 '5' 인데, 'B' 의 값이 '5' 라면 'TRUE AND FALSE' 가 되어 'FALSE' 가 됩니다.

즉 '&&' 는 두 개를 비교하는 중 하나라도 'FALSE' 라면 'FALSE' 를 출력하고 모두 'TRUE' 여야면 'TRUE'를 출력합니다.

 

'||' 는 위와 조금 다릅니다. '||' 는 OR 이라는 의미로 하나만 'TRUE' 라면 'TRUE' 를 출력합니다.

두가지가 모두 'TRUE' 라면 'TRUE'를 출력하고

한가지만 'TRUE' 라도 'TRUE'를 출력하지만

둘 다 'FALSE' 라면 'FALSE' 를 출력합니다.

 

'!' 는 그냥 부정입니다. 'TRUE' 값을 출력하는 친구에게 '!' 를 붙여주면 부정타서 'FALSE' 로 전향합니다.

'!' 를 붙여주면 애가 삐뚤어져서 반대 값을 출력합니다.

만약 값이 'TRUE' 인 값에 '!' 를 붙여준다면 'FALSE' 가 되어버리고

'FALSE' 인 값에 '!' 를 붙여준다면 'TRUE' 가 되버립니다.

 

6. 증감 연산자

++ 값을 1 증가시킨다.
-- 값을 1 감소시킨다.

이 연산자는 변수와 함께 사용합니다.

변수의 앞에 붙어도, 뒤에 붙어도 상관이 있습니다.

 

'++' 는 'A++' 혹은 '++A' 형태로 사용할 수 있습니다.

그냥 간단하게 위와 같이 사용한다면 'A' 라는 변수의 값을 '1' 증가시키는 것이 전부인 연산자입니다.

하지만 앞에 오느냐 뒤에 오느냐에 따라서 약간의 차이가 존재합니다.

'++A' 의 형태로 사용된다면 그 줄의 코드가 실행되기 전에 '1' 이 증가합니다.

그러나 'A++' 의 형태로 사용된다면 그 줄의 코드가 실행된 후 '1' 이 증가합니다.

이런 간소한 차이가 있지만 이러한 차이로 코드에 차이가 존재할 수 있습니다.

 

'++' 이 '1' 을 증가시킨다면 '--' 는 '1' 을 감소시킵니다.

앞에 오는것, 뒤에 오는것의 차이는 '++' 과 같습니다.

 

 

6가지의 연산자를 보셨을텐데요.

다른 언어를 사용하더라도 자주 사용되는 기초 연산자들입니다.

전부 어렵지 않으니 쉽게 이해하실 수 있을 것이라 생각되지만

전부 한번에 외우려면 시간이 걸릴 수 있으니 보면서 여러번 반복하는 것이 좋다고 생각합니다.

댓글
반응형

안녕하세요. 이번 강좌에서는 무한으로 계속 반복해서 클릭을 하는 오토마우스를 만들어 볼 생각입니다.

먼저 간단한 예제를 하나 보여드리고 하나하나씩 뜯어서 설명해드리겠습니다.

사실 컴퓨터 언어는 반복해서 실력을 늘리며 공부해서 뜻을 알아가는 것이라고 생각합니다.

 

start := 0

F1::
start = 1
loop{
    if(start = 1){
        MouseClick, left
        Sleep 25
    }else if(start = 0)
        break
} return

F2::
start = 0
return
		

제가 평소에 가장 많이 사용하는 오토마우스 코딩입니다.

앞의 공백은 'Tab' 키를 눌러서 거리를 벌려주세요.

오토핫키가 줄을 맞춰야 하는 언어인지 기억이 나지 않지만

만약 다른 언어를 사용할 일이 생긴다면 줄을 맞추지 않으면 오류가 생기는 경우도 있습니다.

그렇기 때문에 코딩을 할 때에는 줄을 맞추는 버릇을 들이는 것이 좋다고 생각합니다.

 

그리고 위 코딩과 직접 적은 코드와 매칭 되는 색깔이 다를 수 있는데

포스팅에 코딩한 것을 나타낼 때 오토핫키를 지원을 안 해서 C언어를 기반으로 적어서 다를 수 있습니다.

당황하지 마시고 똑같이 적으시면 작동하실겁니다.

 

1. start := 0

이것을 이해하기 위해서는 변수라는 개념에 대해서 알아야 합니다.

간단하게 말하면 그저 변하는 수라고 야매로 외워도 괜찮나?지만 사실 변수는 숫자가 아닙니다.

 

변수란 값을 저장하기 위해 만든 이름입니다.

빈 공간을 만들어 이름을 붙여주고 그곳에 자신이 원하는 값을 저장하는 것입니다.

 

마우스를 반복해서 클릭을 하는 프로그램이기에 ON/OFF의 기능이 필요합니다.

그렇기에 변수에 '0'이라는 값을 넣어주고 그 변수가 '0'일 경우에 반복을 하지 않게 하기 위해서 만든 것입니다.

만약 이 변수를 만들어주지 않는다면 프로그램을 켠 순간 끌 때까지 계속 클릭을 반복할 것이고

그렇다면 매우 불편할 것입니다.

 

그래서 그냥 ON/OFF를 위해서 변수를 만들었습니다.

 

그리고 가운데에 있는 ':='는 연산자 중에 대입 연산자입니다.

변수에 값을 집어넣는 대입 연산자로 우측에 있는 '0' 을 변수에 넣어주는 것입니다.

 

2. F1:: , F2::

이것은 긴 설명이 필요 없습니다.

그저 'F1'을 눌렀을 때 F1:: 아래에 있는 코드를 실행하는 것이고

'F2'를 눌렀을 때 F2:: 아래에 있는 코드를 실행하는 것입니다.

 

3. start = 1

start의 값을 '1' 로 변경합니다.

이전까지 start의 값은 '0' 이었지만 이 문장 이후로 '1' 변경합니다.

 

4. loop{}

loop란 사전적 의미로 고리라는 말도 있지만 반복이라는 뜻도 있죠.

여러분이 생각하는 그것이 맞을 겁니다. 저 '{}' 중괄호 안에 있는 것들을 계속 반복하는 것입니다.

저희가 만드는 것은 마우스 클릭을 무한으로 반복하는 것이기 때문에 반복이란 의미의 loop 함수가 들어갑니다.

 

5. if(start = 1){}

if란 '만약~' 라는 사전적 의미를 가지고 있습니다.

프로그래밍 언어에서는 조건문의 기본적인 형태입니다.

조건문이란 선택지를 만들어 그 조건에 맞을 경우 실행되는 것을 말합니다.

 

사용 예시로 'if(조건문){실행문}' 이 있습니다.

조건문이 'TRUE(진실)' 일 경우에 실행문이 실행되는 것입니다.

즉 'if(start = 1)' 이란 'start' 라는 변수의 값이 '1' 일 경우라는 뜻입니다.

 

저희는 위에서 'start = 1' 이라고 선언을 해서 'start' 는 '1' 이입니다.

그렇기에 'start' 가 '1' 인가? 라는 조건에 진실이라는 결과가 나옵니다.

그렇게 되어 '{}' 중괄호 안에 있는 것을 실행합니다.

 

6. MouseClick, (Left or Right), X, Y, ClickCount, Speed, (Down or Up)

MouseClick : 마우스를 클릭한다.

(Left or Right) : 왼쪽 혹은 오른쪽

X, Y : 윈도우 상의 좌표

ClickCount : 클릭 횟수

Speed : 속도 (0~100) 낮을수록 빠르다.

(Down or Up) : 클릭 이후 계속 누르고 있을 것이다. 혹은 클릭 후 바로 뗄 것이다.

 

MouseClick, Left 는 결국 왼쪽 클릭을 1번 한다는 의미입니다.

 

7. Sleep, delay

이 코드를 적지 않으면 초당 1,000번의 클릭을 합니다.

그러나 너무 많은 클릭을 하면 컴퓨터가 렉이 걸리거나 프로그램이 견디지 못할 것입니다.

 

하지만 이 코드를 적고 delay 대신

'1000' 을 적는다면 1초에 한 번

'500' 을 적는다면 1초에 두 번

'100' 을 적는다면 1초에 열 번 클릭합니다.

 

8. else if(조건문){실행문}

else란 위의 if문이 아닐경우 앞의 코드를 실행합니다.

즉 지금은 앞에 if가 있기 때문에 앞의 if를 실행합니다.

 

9. break

loop에 멈추는 브레이크가 없다면 주체하지 않고 계속 달릴겁니다.

loop에게는 빨간불이 필요합니다. 그렇기에 이 함수가 존재합니다.

start가 0으로 돌아왔을 경우 break를 만들어 코드를 끝맺음 시켜줍니다.

 

10. return

이 return이 없다면 아래의 F2::를 넘어서 아래의 코드도 실행시켜버립니다.

그것을 막기위해 return을 적어줍니다.

 

나머지 이 아래의 값은 위의 함수들을 재사용한 것에 불과합니다.

결국 이렇게 짧은 코드로 간단한 개인용 오토마우스를 만들 수 있습니다.

댓글
반응형

안녕하세요. 이번에는 오토핫키를 작성하기 위한 툴이 메모장 말고 무엇이 있는지 설명해드리려고 합니다.

사실 제가 여기서 보수적이란것을 깨닫게 되었는데 제가 쓰는 툴 말고는 다른 툴을 잘 모르더라구요.

그래서 겸사겸사 포스팅을 작성하는 겸 제가 직접 찾아본 툴도 적어보려고 합니다.

 

타 사이트에 비해서 전문적인 설명은 못해드리는 만큼 그냥 야매적인 설명은 해드릴 수 있습니다.

 

1. 메모장

메모장은 마이크로 윈도우를 사용중이시라면 다들 컴퓨터에 있을겁니다.

메모장 말고 다른걸 알아보자고 해봤지만 그래도 메모장을 빼먹을 수 없죠.

삭제하시지 않은 이상 어느 컴퓨터에나 있으며 대부분의 컴퓨터 언어를 다룰 수 있는 프로그램입니다.

이렇게 유용한 프로그램이 바로 옆에 있지만 보기 힘들고 구동하는데에도 불편함이 있죠.

굳이 옆에 가스레인지를 두고 아궁이에 불을 땔 필요가 없는겁니다.

하지만 메모장으로 작업을 하면 겉멋이 있죠. 라고 생각합시다.

 

2. SciTE4AuyoHotkey

사진 1, 오토핫키 에디터

제가 처음 오토핫키를 배울적 소개를 받은 에디터입니다.

SciTE 기반으로 제작된 에디터로 오토핫키 포럼에서 무료로 배포하고 있죠.

하지만 아쉬운 것은 업데이트가 14년 10월을 기점으로 업데이트가 되지 않는다는 것입니다.

그래도 나쁘지 않습니다. 개인적으로 저는 이 툴을 오래 애용했습니다.

 

한글패치가 존재하고 처음 프로그래밍을 하신다면 이 프로그램이 어떨까 싶습니다.

제가 처음 시작할 때 썼던 것이니까요.

 

3. Notepad++

사진 2, 노트패드++

여러가지 언어에서 많이 쓰이는 노트패드++ 입니다.

유명하고 여러가지 기능이 존재하는 프로그램입니다.

저는 강좌에서 SciTE4AutoHotkey를 사용할 예정이지만 노트패드도 나쁘지 않습니다.

새로운 플러그인을 설치하여 오토핫키를 사용할 수 있는 환경을 만들어주어야 하지만

유명한 만큼 쉽게 검색으로 정보와 자료를 얻으실 수 있습니다.

댓글
반응형

안녕하세요. 먼저 프로그래밍을 하기 이전에 먼저 프로그램을 설치할 줄 알아야합니다.

오토핫키 설치는 왠만한 온라인 게임 설치만큼 간단합니다.

 

사진 1, 구글 검색

구글에 들어가서 'autohotkey' 를 검색해주세요.

한글로 '오토핫키' 를 검색할 경우 글을 적는 시각을 기준으로 나무위키가 최상단에 검색됩니다.

그렇기 때문에 저는 영어로 검색했습니다.

 

그리고 위에 떠있는 주소(https://autohotkey.com/)를 눌러주시면

사진 2, 오토핫키 홈페이지

'Download' 버튼이 보이는 것을 확인하실 수 있습니다.

예전의 경우에는 버튼을 클릭할 경우 바로 파일이 다운로드 되었지만

사진 3, 오토핫키 버전

시간이 지남에 따라 3개의 버튼이 등장하는 모습을 보실 수 있습니다.

첫번째 버튼은 정식으로 나온 버전 중 최신 버전을 다운로드 하실 수 있습니다.

보통 올라와 있는 오토핫키 강좌 포스트에 맞는 버전일겁니다.

 

두번째 버튼은 앞으로 나올 버전의 알파버전인 것 같습니다. 오토핫키 버전2 알파버전입니다.

사실 변경사항은 따로 알아보지 않아 모르지만 정식버전이 나온다면

바뀐점이 많을 경우에 새로 포스팅을 하겠습니다.

 

세번째 버튼은 구버전으로 사실 사용할지는 잘 모르겠습니다.

각자 맞는 버전을 알아서 다운로드 하시면 될 것 같습니다.

 

마지막에 있는 'Other Versions' 라는 하이퍼링크가 보일겁니다.

여느 홈페이지와 같이 여태 나온 버전 중 자신에게 맞는 버전이 따로 있다면 선택해서 다운로드 하실 수 있습니다.

 

사진 4, 오토핫키 v1.1.32.00 setup

저는 첫번째 버튼을 눌러 1.1.32 버전을 다운로드해서 사용할 생각입니다.

 

사진 5, 오토핫키 설치 시작

오토핫키 설치기를 켜주시면 광고도 달려있지 않은 설치기가

'지정된 경로' 로 설치할 건지 아니면 '새로운 경로' 에 설치할 것인지 선택하라고 할겁니다.

 

저는 게임을 제외하곤 C드라이브 설치를 하는 버릇이 있어서 첫번째 버튼을 선택했습니다.

다른 경로에 선택하고 싶으시다면 두번째 버튼을 선택해주시면 될 것 같습니다.

 

사진 6, 오토핫키 설치 완료

예전에는 설치중이라는 모습이라도 보였던 것 같은 기억이 있지만

요즘 세상 인터넷은 계속 빨라지다보니 누르자마자 설치가 완료되었습니다.

 

첫번째 버튼과 두번째 버튼은 저희에게 필요한 것이 아닙니다.

만약 영어에 능통하시다면 위의 두 버튼으로 오토핫키를 터득하는 것도 나쁘지 않을까 싶습니다만

저는 영어에 능통하지 못하기 때문에 그냥 꺼주도록 하겠습니다.

 

사진 7, 설치 확인

그래도 너무 설치가 빠른 나머지 혹여나 설치가 안되었을까 바탕화면에 우클릭을 누르신 뒤

새로 만들기에서 'AutoHotkey Script' 가 있는 것을 확인하신 뒤 자신이 원하는 곳에 하나 만들어주세요.

 

빨라지긴 했어도 잘 설치가 된 모습을 보여줍니다.

그만큼 예전에 비해서 기술이 발전한 모습을 보여주는 것이죠.

 

사진 8, 오토핫키 파일 우클릭

새로 만들기로 생성하신 오토핫키(.ahk) 파일에 우클릭을 하시면 열기, 새창으로 열기 같은 것이 아닌

'Run Script', 'Compile Script', 'Edit Script' 세 가지 버튼이 존재하는 것을 확인하실 수 있습니다.

 

'Run Script' 는 스크립트를 실행하는 것입니다. 파일을 더블클릭을 하면 자동으로 저것이 선택된다고 보시면 됩니다.

'Compile Script' 는 바로 그 자리에 '.exe' 파일을 내보냅니다. 배포용으로 보시면 될 것 같습니다.

'Edit Script' 는 이 파일을 수정하는 겁니다. 코딩을 들어가는 것이죠.

 

사진 9, 코딩 시작?

'Edit Script' 를 클릭하시면 자신이 코딩하지 않은 다른 주석들이 적혀있습니다.

주석은 원소의 주석이 아닙니다. 중간 중간에 메모를 해두는 것이라고 생각하시면 편합니다.

즉 그저 메모일 뿐이니 전부 지워주시면 됩니다.

 

하지만 일단 아직은 0강이므로 다음은 1강에서 진행하도록 하겠습니다.

 

댓글