2016. 2. 26.

초간단 스크립트 메모장

웹서핑등을 하다보면 복사해서 붙여넣거나 메모할 내용이 생깁니다.
이럴때 어떤창보다도 항상 위에 윈도우메모장을 실행시킬 수 있다면 편리하겠죠.

물론 이런 용도로 나와있는 기성 프로그램도 있지만, 간단하게 직접 만들어서 써보자구요^^

초간단하게는 다음의 스크립트로 충분하겠죠

Run, Notepad.exe
WinWaitActive,ahk_class Notepad
WinSet, AlwaysOnTop, On, ahk_class Notepad
ExitApp


조금 멋을 부려서, 메모장 위치를 조정하고...기타 등등 포함해서.

#NoTrayIcon

wtitle=제목 없음 - 메모장
SetFormat, integer, d

settitlematchmode, 3
IfWinExist , %wtitle%
exitapp

Run, Notepad.exe,,hide
DetectHiddenWindows, On
settitlematchmode, 3
WinWait, %wtitle%
pox := A_ScreenWidth - 310
hei := A_ScreenHeight
envdiv, hei, 5

settitlematchmode, 3
WinMove,%wtitle%,,%pox%,20, 310,%hei%
settitlematchmode, 3
WinShow, %wtitle%
settitlematchmode, 3
WinActivate ,%wtitle%
settitlematchmode, 3
winset, alwaysontop, on,%wtitle%
exitapp


스크립트를 콤파일해서 실행파일로 만들고,
바로가기 아이콘 생성후 바로가기 속성에서 윈도우 단축키를 지정해 놓으시면
단축키로 바로 열리는 메모장~


------------------------------------------------------------------------------------------------------
[출처 : http://autohotkey.co.kr/b/1-4 ImMBR님 공유 스크립트와 설명댓글]
------------------------------------------------------------------------------------------------------



=== 추가 1 ===

SetTitleMatchMode명령어는 윈도우 타이틀바에 표시되는 이름을 찾거나, 비교할때의 기준을 정하는 명령어입니다.
위에 사용된 WinWait, WinMove등의 명령어에서 \'제목 없음 - 메모장\'이랑 관련된...
SetTitleMatchMode, 2 로 정해놓으면 윈도우 타이틀에 지정한 내용이 포함만 되어있어도 됩니다.
SetTitleMatchMode, 3 에서는 윈도우 타이틀이 지정한 제목과 정확하게 일치해야 합니다.
반드시 있어야 되는 명령어는 아니지만, 혹시 있을지도 모르는 스크립트의 오작동을 막기위해서...

제가 알기로는 ahk관련 책은 없는 것으로... 정말 한 권쯤 나와주면 좋겠는데 말입니다.

저같은 경우에는 그냥 도움말 파일이랑 www.autohotkey.com 포럼을 뒤져가면서 조금씩 얻어들었습니다.





=== 추가 2 ===

Run, Notepad.exe ; 노트패드를 실행시킨다.
WinWaitActive,ahk_class Notepad : 노트패드 창이 열리기를 기다린다.
WinSet, AlwaysOnTop, On, ahk_class Notepad : 노트패드 창을 최상위모드로 설정한다.
ExitApp : 스크립트 종료

위에도 말씀드렸지만 이 4줄의 스크립트로도 충분합니다.

길게 써놓은 스크립트는 제가 잘 모르고 만든 것이라 쓸모없는 내용이 많이 포함되어 있습니다.

설명드리자면
노트패드를 화면에 보이지 않게 실행시키고 메모장을 이동시킬 위치와 크기를 계산하고
보이지 않는 메모장을 계산한 위치로 옮긴 후에 창을 보이도록 만들어 준다~

필요없는 내용을 대폭 들어내면...

settitlematchmode, 3

Run, Notepad.exe
WinWait,제목 없음 - 메모장

WinMove,제목 없음 - 메모장,,700,20,310,200
winset, alwaysontop, on,제목 없음 - 메모장
exitapp

이상의 스크립트로도 충분합니다.





=== 추가 3 ===

wtitle=제목 없음 - 메모장
>> 변수 wtitle에 "제목 없음 - 메모장"이란 문자열을 저장

SetFormat, integer, d
>> 우선 ahk에는 변수지정 없습니다^^ 심지어 문자형, 숫자형 같은 변수도 구분안합니다.
변수는 딸랑 한 종류인데 ahk에서 알아서 용도에 맞게 사용합니다.
위 명령어의 뜻은 만약에 변수에 숫자가 저장될 경우 정수형, 10진수로 저장하라는 뜻인데,
사실, 위의 스크립트에 반드시 필요한 건 아니었는데 그냥 넣어놓은 겁니다;;;

settitlematchmode, 3
IfWinExist , %wtitle%
exitapp
>> 만약에 "제목 없음 - 메모장"이란 이름을 가진 윈도우가 열려있으면, 스크립트를 종료시킨다.

Run, Notepad.exe,,hide
>> 메모장을 보이지않게 hide모드로 실행
DetectHiddenWindows, On
>> 숨겨진 윈도우도 ahk에서 인식하도록 설정
settitlematchmode, 3
WinWait, %wtitle%
>> "제목 없음 - 메모장" 윈도우가 열리기를 기다린다.

pox := A_ScreenWidth - 310
>> 현재 화면 해상도 설정의 가로값(예 1024)에서 310을 빼준 값을 pox에 저장.
hei := A_ScreenHeight
>> 현재 화면의 세로값(예 768)을 hei에 저장
envdiv, hei, 5
>> hei값을 5로 나눠준 값을 다시 hei에 저장한다.

settitlematchmode, 3 
WinMove,%wtitle%,,%pox%,20, 310,%hei%
>> "제목 없음 - 메모장" 윈도우를 이동시키고 크기를 변경합니다. (위에서 계산한 좌표값으로)
화면의 오른쪽에서 310 픽셀 위에서 20 떨어진 곳으로 이동시키면서
윈도우 크기를 가로 310, 높이는 (화면 세로크기의 5분의 1로) 변경합니다.

settitlematchmode, 3
WinShow, %wtitle%
>> hide모드로 실행된 "제목 없음 - 메모장" 윈도우를 보이게 만듭니다.

settitlematchmode, 3
WinActivate ,%wtitle%
>> "제목 없음 - 메모장" 윈도우를 활성화 시킵니다.

settitlematchmode, 3
winset, alwaysontop, on,%wtitle%
>> "제목 없음 - 메모장" 윈도우를 항상 최상위에 있도록 설정합니다.

exitapp
>> 스크립트 종료