참고
https://www.clien.net/service/board/lecture/10501180CLIEN
오토핫키로 프로그램을 실행하고 관리하는 방법 (초보자용 )
https://www.clien.net/service/board/lecture/10752273CLIEN
오토핫키를 이용하여 사이트 접속 없이 검색엔진으로 검색 활용하기
https://www.clien.net/service/board/lecture/14935877CLIEN
오토핫키를 이용하여 선택한 텍스트 검색하기
본문 내용의 스크립트를 미디어 파이어로 공유합니다.(5,6번 항목 제외)
1.입력 모드 구분해서 한글 혹은 영어로 입력하기
저는 Keepass라는 무료 로컬 암호 관리 프로그램을 사용하고 있는데요.
한 가지 단점은 아이디 암호 입력창에 한글 입력 상태에서 자동 암호 입력 단축키를 누르면 당연히
영어가 아니라 한글로 입력되기 때문에 오류가 나고 사이트에 제대로 접속이 되지 않는다는 것이였습니다.
물론 이걸 편하게 해주는 확장 프로그램이 따로 있긴 한데 저는 그냥 오토핫키로 무조건 영어로 입력하는 방법이 편하더군요.
잘못된 형식의 이미지 링크입니다.
참고로 빨간 체크 박스 부분 첫 줄 IME 부터 return까지는 한 번만 입력해주면 됩니다.
예를 들어 입력 모드 구분해서 한글 혹은 영어로 입력에 필요한 핫스트링이나 단축키를 또 추가할 때
저 부분까지 계속 입력하는게 아니라는 뜻입니다.
2.한영 입력 모드 상태 신경쓰지 않고 한영 입력하기
+space::Send, {vk15sc138} ; shift + 스페이스키로 한영 전환
^space::Send, {vk15sc138} ; Ctrl + 스페이스키로 한영 전환
많은 사람들이 애용하는 스크립트지만 그냥 단순한 키맵핑에 불과합니다.
따라서 오타를 줄이기 위해 마우스 커서에 한영 상태를 표시하는 방법이나 영어를 한글로 자동 변환하는 방법도 있는데요.
이 방법들은 쉽게 이야기해서 현재 키보드 입력 모드가 영어인지 한글인지 파악하기 어려워서 생기는 문제때문에 나름 해결책으로
사용하는 방법이지만 기존 한영 입력 상태에 여전히 의존하는 방법입니다.반대로 제가 사용하는 방법은 단축키를 누른 뒤 무조건
영어로 입력하고 단축키를 누른 뒤 무조건 한글로 입력하는 방법입니다.
이러면 현재 입력 모드가 영어인지 한글인지 알 필요조차 없기 때문에 이 방법에 익숙해지면 한영 상태로 인한 오타는
거의 발생하지 않습니다.1번과 사용법은 같기 때문에 단축키 부분만 설명합니다.
잘못된 형식의 이미지 링크입니다.
3.관리자 권한으로 명령 프롬프트 열기
그냥 단축키 누르면 바탕화면 경로로 관리자 권한으로 명령 프롬프트가 실행되고
탐색기에서 단축키를 누르면 해당 경로로 관리자 권한으로 명령 프롬프트가 실행되는 스크립트입니다.
위의 미디어 파이어 공유 파일 참조
4.제목 표시줄 대신 Alt 키 누른채 아무 곳이나 클릭하여 창 이동
일반적으로 창을 이동 시킬려면 제목 표시줄을 클릭하고 이동시켜야 하는데 더 편하게 이동시키는 스크립트입니다.
단 독자적인 UI를 사용하는 프로그램은 안 될 수도 있습니다
위의 미디어 파이어 공유 파일 참조
5.오토핫키를 이용하여 부팅후 프로그램 자동 시작하기
윈도우 시작시 관리자 권한으로 자동 시작하는 메뉴가 없는 프로그램들도 많은데요.
이럴땐 일반적으로 시작 프로그램에 등록하고 안 되면 작업 스케줄러,배치파일를 사용하거나
오토런스 같은 프로그램을 따로 이용하기도 합니다.
저 같은 경우는 당연히 오토핫키로 합니다.
잘못된 형식의 이미지 링크입니다.
일단 Autohotey.ahk 파일을 만든 뒤에 그냥 run 명령어를 이용해서 원하는 프로그램을 순차적으로 적어줍니다.
#NoTrayIcon은 트레이 알림영역에 해당 아이콘을 표시하지 않는다는 명령어입니다.
자동 시작으로 오토핫키를 이용하는 이유가 오토핫키 명령어도 사용가능하기 때문인데 프로세스 익스플로러라는 작업관리자 프로그램을
자동 시작 실행하면 최소화 상태로 실행할 수 있습니다.
지연 시간이 필요하면 Sleep 명령어
해당 창이 활성화될때까지 기다릴려면 winwait나 WinWaitActive등의 명령어가 필요합니다.
그리고 WinMove 명령어를 이용해서 항상 바로 시작하는 브라우저 창 위치 크기랑 시작 프로그램 창 위치 크기도 맞출 수 있습니다.
본문 첫 줄의 오토핫키로 프로그램을 실행하고 관리하는 방법 (초보자용 )를 참고하세요.
Autohotey.exe을 작업스케줄러에 관리자 권한으로 등록하면 Autohotey.ahk가 부팅 시작시
자동으로 실행되는데 작업스케줄러에서 마우스로 클릭하지 말고 명령 프롬프트 실행후 명령어를 이용해서
등록하는게 더 편합니다.
SCHTASKS /Create /f /ru administrators /tn 작업 이름(아무거나) /sc ONLOGON /tr "실행경로" /rL HIGHEST
명령어를 이용하여 작업스케줄러에 관리자 권한으로 프로그램 자동 시작 실행 등록하는 방법
참고로 Autohotey.ahk 파일이 아닌 Autohotey.exe 파일을 등록하는 이유는 Autohotey.exe 을 실행하면
같은 파일 이름의 ahk 파일만 자동으로 읽습니다.ahk 파일을 자동 시작 실행하면 저는 연결 프로그램창이 따로 뜨더군요.
오토핫키로 연결 프로그램을 항상 설정해줘도 떠서 그냥 Autohotey.exe 파일을 등록합니다.
6.락키 항상 on,off하기
http://autohotkeykr.sourceforge.net/docs/commands/SetNumScrollCapsLockState.htm
SetNumlockState,AlwaysOff
SetCapslockState,AlwaysOff
저는 넘버키랑 캡스락키를 사용하지 않기 때문에 실수로 눌러도 작동 안 되게 항상 off 상태로 맞춰놓습니다.
5번 파일의 마지막 줄에 적어 놓습니다.
7.Win + X 대체 메뉴
이걸 만든 계기는 검색하는 것도 귀찮고 윈도우 자체 Win + X가 생각보다 유용해서 이걸 더 활용할 방법이 없을까
해서 만든것입니다.그리고 주변 컴맹은 Win + X만 알려주면 되서 편합니다.
빨간 체크 박스 부분은 어차피 검색으로 하기도 힘들고 사용하다보면 검색보다 핫키가 실행도 더 편하더군요.
컴퓨터 종료할 때도 Win + X 누르고 Q 누르면 됩니다.
다른 프로그램이나 레지스트리,배치 파일 필요없이 오토핫키 자체로 해결가능합니다.
윈10 홈 버전 1909에서 작동에 이상이 없고 윈7이나 8.1의 경우 배경,윈도우 업데이트 같은 메뉴는 명령어가 달라서
다른 명령어를 이용해야 합니다.
오토핫키에 단축키를 너무 많이 설정하면 가끔 사용하는 건 나중에 기억도 잘 안 나고
더 이상 등록할만한 단축키도 없을 때 오토핫키의 메뉴를 사용하면 좋습니다.단축키 호출후 핫키로 실행할 수 있기 때문에
단축키 다음으로 빠르고 외울 필요도 없기 때문에 매우 유용합니다.
잘못된 형식의 이미지 링크입니다.
모니터 끄기 , 입력 장치 차단 해제 - 모니터 끄기는 단축키만 눌러도 작동됩니다.해제도 같은 방법이며 입력 장치 차단은 보안용이 아니라
키보드 혹은 마우스 먼지 청소할 때 사용합니다.
알림 영역 아이콘 청소 - 알림 영역의 불필요한 항목을 삭제합니다.
탐색기 재시작 - 탐색기나 윈도우 창이 먹통될 때 탐색기 재시작으로 해결되는 경우가 있습니다.
인터넷 연결/해제 - 어댑터 이름이 이더넷일때만 작동됩니다.아마 대부분 기본값일텐데 아니면 이름을 변경해야 합니다.
작업표시줄 숨기기 - 모니터 가장자리에 커서를 이동시켜도 작업표시줄을 안 보여줍니다.
휴지통 모든 드라이브 비우기 - 말 그대로 휴지통의 내용을 비웁니다.호기심에 누르면 다 없어지니 주의합니다.
; 표시할 메뉴 생성
gosub menu
return
; 위 gosub과 같은 이름
menu:
Menu,이름,Add,메뉴에 표시할 항목 이름,하이퍼링크 (공백없이)
;아이콘이 필요한 경우
Menu,이름,icon,메뉴에 표시할 항목 이름,아이콘 경로,숫자는 해당 파일의 몇 번째 아이콘을 말하며 생략 가능
위 스크립트 반복(노가다)
Menu,이름,add,메뉴에 표시할 항목 이름, :하위 메뉴 이름
하위 메뉴는 이런 식으로 적고 하위 메뉴 이름을 동일하게 설정하면 됩니다.
필요없는 항목이나 이름,핫키는 찾아서 삭제 및 수정하면 됩니다.
#x:: ; Win + X를 누르면 해당 메뉴 표시
Menu,Menu,Show,, ; 위 gosub과 같은 이름 , show 다음에,X , Y 축 지정으로 메뉴 표시 위치 가능한데 생략하는게 편합니다.
return
참고로 메뉴 부분 스크립트는 AHK 파일 제일 윗쪽에서 하위 메뉴부터 적어야 됩니다.
안 그러면 단축키 호출해도 메뉴 없다고 에러 나옵니다.
######
질문하나 드려봅니다.
Menu,이름,Add,메뉴에 표시할 항목 이름,하이퍼링크 (공백없이)
가 있는데 .. 저 하이퍼링크를 몇 줄의 텍스트로 대체할 수도 있을까요? 있다면 어떤 식으로 처리 해야 하는지
질문드려봅니다.
그건 저도 잘 모르겠는데 연결을 하면 실행할 명령어 부분도 따로 있어야 하지 않을까요?
제가 사용하는 것과 약간 다르게 메뉴를 사용하는 건 이거 밖에 모릅니다.
https://github.com/Drugoy/Autohotkey-scripts-.ahk/blob/master/Icon%20Menu%20Launcher/Icon%20Menu%20Launcher.ahk
이라고 나오네요. Icon도 공유 부탁드립니다.
AutoHotkeyA32.exe 말고 AutoHotkeyU64.exe 유니코드 버전으로 사용하면 될거에요.
모니터 끄기라면 미디어파이어에 공유한 파일에 들어있습니다.
분문에 스크립트로 올리면 복붙시 에러가 나는 경우가 있습니다.
^!M::MonitOff(MonitVar) ; Ctrl + Alt + M을 누르면 모니터 끄고 다시 누르면 켜기
MonitOff(ByRef x) {
SetTimer, MonitOffLabel, % (x:=!x) ? "500" : "Off" ;toggle the var and turn the timer on or off
If x ;if it turned on turn monitor off
SendMessage,0x112,0xF170,2,,Program Manager
Else ;if it turned off move the mouse to wake up the screen
MouseMove, 0,0,0,R
Return
MonitOffLabel:
If(A_TimeIdle<500) ;if there has been activity
SendMessage,0x112,0xF170,2,,Program Manager
Return
}
듀얼 모니터인데 한 쪽 모니터만 끄는 거라면 윈도우에 내장된 DisplaySwitch를 이용하여 프로젝트 선택
화면을 대체할 수 있습니다.
^+A::Run C:\Windows\system32\DisplaySwitch.exe /internal ; ctrl + shift + A키를 누르면 PC 화면만 선택
^+S::Run C:\Windows\system32\DisplaySwitch.exe /clone ; ctrl + shift + S키를 누르면 복제만 선택
^+D::Run C:\Windows\system32\DisplaySwitch.exe /extend ; ctrl + shift + D키를 누르면 확장만 선택
^+F::Run C:\Windows\system32\DisplaySwitch.exe /external ; ctrl + shift + F키를 누르면 2번째 화면만 선택
혹시 언어별 단축키를 우측 ctrl, alt 단독으로 설정하거나 우측 ctrl, alt 키와 조합한 단축키로 사용하게도 가능할까요? 좌우를 구분해서 사용할 수 있다면 정말 좋을 것 같아서요.
특히 맥 쓸때는 한글/영어/일본어 이런 식으로 사용할 때 카라비너로 키 하나당 언어를 쓸 수 있게도 가능한데 오토핫키로 그렇게 할 수 있을지 궁금합니다.
(키 맵핑은 제 편의를 위해 짠거라 알아서 바꿔서 쓰세요!)
( // 로 주석
; # win
; ! alt
; ^ ctrl
; + shift
; * 상용구 바로 입력
; ? 상용구 입력된 문자에 상관없이 입력
D1:= 0
D2:= 0
D3:= 0
maxre := 1
return
vk06A & vk0DD:: ; 매크로 토글 거꾸로
{
if(D1 = 0 || D1 = 2){
SoundPlay,%A_WorkingDir%\mp3\1.mp3
MsgBox,0,,매크로 1 Active,0.5
D1:= 1
D2:= 0
D3:= 0
}
else if(D1 = 3){
MsgBox,0,,매크로 2 Active,0.5
SoundPlay,%A_WorkingDir%\mp3\2.mp3
D1:= 2
D2:= 0
D3:= 0
}
else if(D1 = 1){
SoundPlay,%A_WorkingDir%\mp3\3.mp3
MsgBox,0,,매크로 3 Active,0.57
D1:= 3
D2:= 0
D3:= 0
}
return
}
vk06F & vk0BB:: ; 매크로 토글
{
if(D1 = 0 || D1 = 3){
SoundPlay,%A_WorkingDir%\mp3\1.mp3
MsgBox,0,,매크로 1 Active,0.5
D1:= 1
D2:= 0
D3:= 0
}
else if(D1 = 1){
SoundPlay,%A_WorkingDir%\mp3\2.mp3
MsgBox,0,,매크로 2 Active,0.5
D1:= 2
D2:= 0
D3:= 0
}
else if(D1 = 2){
SoundPlay,%A_WorkingDir%\mp3\3.mp3
MsgBox,0,,매크로 3 Active,0.5
D1:= 3
D2:= 0
D3:= 0
}
return
}
vk06F & vk068:: ; 매크로 종료
SoundPlay,%A_WorkingDir%\mp3\6.mp3
if D3 = 0
{
MsgBox,0,,매크로 해제,0.5
D1:= 0
D2:= 0
D3:= 0
}
return
#if D1 = 1 ; 1번 매크로시 실행할 동작
Numpad7:: ActiveingKey("PotPlayer64","{left}")
; 프로그램을 활성화하고 키를 누른후 다시 비활성화
Numpad9:: ActiveingKey("PotPlayer64","{right}")
Numpad8:: ActiveingKey("PotPlayer64","{space}")
Numpad4:: OpenWindowActive("Notion.exe","C:\Users\Administrator\AppData\Local\Programs\Notion\Notion.exe")
; 프로그램을 활성화,최소화, 만약 실행되지 않았다면 실행
Numpad5:: OpenWindowActive("code.exe","C:\Users\Administrator\AppData\Local\Programs\Microsoft VS Code\Code.exe")
Numpad6:: OpenWindowActive("whale.exe","C:\Program Files (x86)\Naver\Naver Whale\Application\whale.exe")
Numpad1:: #2
vk06B:: ; +키 창 최대화, 원상복구
WinGetPos,
if (maxre) {
WinGetActiveTitle, Title
WinMaximize,A
maxre = 0
} else if (maxre = 0) {
WinRestore,A
maxre = 1
}
return
#if D1 = 2 ; 2번 매크로시 실행동작
Numpad9:: Send {Volume_Up}
Numpad6:: Send {Volume_Down}
Numpad1:: WindowKeyPress("whale.exe","!{left}")
; 프로그램이 활성화 되있을시 키를 누름 , 각각 앞으로가기 뒤로가기 대응
Numpad3:: WindowKeyPress("whale.exe","!{right}")
Numpad5:: WheelUp
Numpad2:: WheelDown
Numpad8:: OpenWindowActive("KakaoTalk.exe", "C:\Program Files (x86)\Kakao\KakaoTalk\KakaoTalk.exe")
Numpad4:: Send !{F4} ; 활성화된 창 종료
NumpadDot:: keyhistory
vk0BD:: ; 활성화된 창의 정보 얻어오기
WinGetActiveTitle, Title
CoordMode, pixel,Screen
WinGetPos, pos_x,pos_y,width,height,%Title%
MsgBox,0,,'%pos_x%,%pos_y%,%width%,%height%,%Title%'
return
#if D1 = 3 ; 3번 매크로시 실행동작, 아직 안짯으니 원하는거 넣어도 됨
return
#if
;------------------------------------------------------------
;기본상용구
:*?:->::→
:*?:<-::←
;-----------------------------------------------------------
; 프로그램 실행,최소화 단축키
WindowKeyPress(window,key){
IfWinActive,ahk_exe %window%
{
send, %key%
return
}
}
ActiveingKey(window,key,isclick := false){
IfWinExist,ahk_class %window%
{
IfWinNotActive,ahk_class %window%
{
WinGetActiveTitle, Title
WinActivate
if(%isclick%) {
MouseGetPos vx,vy
MouseClick Left, 1565,245,1,07
MouseMove %vx%, %vy%
}
Send, %key%
WinActivate, %Title%
return
} else {
Send, %key%
return
}
}
}
OpenWindowActive(Window,AppAdress){
IfWinExist,ahk_exe %Window%
{
IfWinNotActive,ahk_exe %Window%
{
WinActivate
return
} else {
WinMinimize
Return
}
} else {
Run %AppAdress% UseErrorLevel
If ErrorLevel
{
Msgbox, File %AppAddress% Not Found
Return
}
else
{
WinActivate
Return
}
}
}
mapping("A","whale","C:\Program Files (x86)\Naver\Naver Whale\Application\whale.exe")
mapping("S","code","C:\Users\Administrator\AppData\Local\Programs\Microsoft VS Code\Code.exe")
mapping("D","notion","C:\Users\Administrator\AppData\Local\Programs\Notion\Notion.exe")
return
code:
Run, C:\Users\Administrator\AppData\Local\Programs\Microsoft VS Code\Code.exe
return
whale:
Run, C:\Program Files (x86)\Naver\Naver Whale\Application\whale.exe
return
notion:
Run, C:\Users\Administrator\AppData\Local\Programs\Notion\Notion.exezx
return
mapping(key,name,window) {
Menu,Menu,Add,%key%-%name%,%name%
Menu,Menu,icon,%key%-%name%,%window%
}
사실 한번 더 리팩토링해서 한번에 해버리고 싶은데 잘 안되더라구요
/Vollago