자주 묻는 질문(FAQ)

여러분의 질문이 아래 리스트에 없다면, 공동체가 운영하는 autoHotkey.net의 FAQ를 점검해 보십시오.

언어 구문

일반적 과업

핫키, 핫스트링, 그리고 리맵핑

언어 구문

언제 인용 표식을 명령어와 그의 매개변수에 사용하는가?

두겹 따옴표 (")는 표현식 안에서만 특별한 의미가 있습니다. 다른 곳에서는 문자 그대로 마치 정상 문자처럼 취급됩니다. 그렇지만, 스크립트가 프로그램을 기동시키거나 문서를 열때, 운영 체제는 보통 겹따옴표가 명령어-줄 매개변수에 둘러져 있기를 요구합니다. 다음 예제처럼, 안에 공백이 있으면 말입니다: Run, Notepad.exe "C:\My Documents\Address List.txt".

정확하게 언제 변수 이름을 퍼센트 기호로 둘러싸는가?

변수 이름은 언제나 퍼센트 기호로 둘러쌉니다. 단, 아래의 볼드체로 보여준 것은 제외합니다:

1) 입력 변수나 출력 변수인 매개변수에: StringLen, OutputVar, InputVar
2) 할당의 왼쪽에: Var = 123abc
3) 전통적인 (비-표현식) if-서술문의 왼쪽에: If Var1 < %Var2%
4) 표현식의 모든 곳에. 예를 들어:

If (Var1 <> Var2)
    Var1 := Var2 + 100

언제 퍼센트 기호와 숨표를 피신시켜야 하는가?

문자 그대로의 퍼센트 기호는 반드시 피신시켜야 합니다. 앞에다 액센트/백틱을 붙이면 됩니다. 예를 들어: MsgBox 현재 백분률은 25`% 입니다. 문자 그대로의 쉼표도 반드시 피신시켜야 합니다 (`,). 단, MsgBox 또는 명령어의 마지막 매개변수로 사용될 때는 제외합니다 (이 경우 액센트는 허용되지만 필수는 아닙니다).

쉼표나 퍼센트 기호가 표현식 안에서 따옴표로 둘러 싸이면, 액센트는 허용되지만 필수는 아닙니다. 예를 들어: Var := "15%".

일반적인 과업

공식 빌드 또는 예전 배포본은 어디에서 찾을 수 있는가?

오토핫키 내려받기 페이지를 참조합니다.

왜 스크립트에서 어떤 줄은 절대로 실행되지 않는가?

어떤 줄이든 즉시 실행하고 싶다면 스크립트가 실행될 때 상단에 있어야 합니다. 그 다음에 핫키, 핫스트링, 또는 Return이 나와야 합니다. 더 자세한 것은 자동-실행 섹션을 참조하십시오.

또한, 한 줄 이상 실행하는 핫키는 그의 첫 번째 줄이 핫키 바로 아래에 나타나야 합니다. 같은 줄이 아닙니다. 예를 들어:

#space::  ; Win+Spacebar
Run Notepad
WinWaitActive Untitled - Notepad
WinMaximize
return

왜 스크립트가 XP에서는 잘 실행되는데 Vista나 Windows 7 또는 8에서는 실행되지 않는가?

운영체제를 전환하면, 다른 무언가도 역시 바뀔 가능성이 높습니다. 그 때문에 스크립트에 영향을 끼칠 수 있습니다. 예를 들면, 새 컴퓨터를 구입했다면, 예전 컴퓨터와 어떻게든 다를 겁니다. 또 새로운 버전의 오토핫키로 업그레이드했다면, 예전에는 어떤 버전이었는지 알아보고 변경 기록호환성 노트를 점검해 보십시오.

XP에서 비스타나 그 이후 버전의 윈도우즈로 이전하면 자주 발생하는 문제는 프로그램이 "승격되어 버려서" (관리자로 실행되어 버리므로) 핫키가 막히거나 자동화되기를 거부합니다. 적어도 세가지 해결책이 있습니다:

SoundGet, SoundSet, SoundGetWaveVolume 그리고 SoundSetWaveVolume는 비스타 이전 이후 버전에 따라 다르게 행동합니다. 특히, 장치 번호가 다르고 어떤 컴포넌트는 사용할 수조차 없습니다. 행위는 오디오 드라이버에 따라 다릅니다. XP에 사용되는 드라이버라면 당연히 다를 겁니다. 사운드 카드 분석 스크립트를 사용하면 올바른 장치 번호를 찾을 수 있습니다.

트레이 아이콘을 통하여 스크립트를 편집할 수 없다. 에러 때문에 시작조차 하지 않는다. 어떻게 해야 하는가?

스크립트의 에러를 먼저 수정할 필요가 있습니다. 그 다음에 트레이 아이콘을 다시 얻을 수 있습니다. 그러나 먼저, 해당 스크립트 파일을 찾을 필요가 있습니다.

다음 디렉토리에서 AutoHotkey.ahk를 찾습니다:

또다른 오토핫키 실행파일을 직접적으로 실행하고 있다면, 그 스크립트의 이름은 실행파일에 따라 다릅니다. 예를 들어, AutoHotkeyU32.exe를 실행하고 있다면, AutoHotkeyU32.ahk를 찾습니다. 여러분의 시스템에 따라 ".ahk" 부분이 감추어져 있을 수 있지만, 그 파일은 분명히 [H]와 같은 아이콘이 있습니다.

보통 스크립트 파일에 우클릭해서 Edit Script를 선택하면 편집할 수 있습니다. 그렇지 않다면, 파일을 노트패드나 기타 다른 편집기로 열 수 있습니다.

AutoHotkey를 시작 메뉴로부터 기동했거나 또는 직접 AutoHotkey.exe를 (명령어 줄 매개변수 없이) 실행했다면, 위에 보여준 위치 중 하나에서 스크립트를 찾습니다. 다른 방법으로 아무데나 원하는 곳에 스크립트 파일을 만들어서 (something.ahk), 오토핫키를 실행하는 대신에 그 스크립트 파일을 실행할 수 있습니다.

명령어 줄 매개변수 "스크립트 파일이름" 그리고 AutoHotkey.exe의 이식성을 참조하십시오.

코드에서 에러를 어떻게 발견하고 고칠 수 있는가?

간단한 스크립트라면 스크립트 디버깅하기를 참조합니다. 변수의 내용을 보여주려면, MsgBox 또는 ToolTip을 사용합니다. 복잡한 스크립트라면 상호대화 디버깅을 참조합니다.

AHK를 USB 드라이브에서 실행할 수 있는가?

AutoHotkey.exe의 이식성을 참조하십시오. 자동-포함 함수 라이브러리를 사용한다면, AutoHotkey.exe와 Lib 폴더는 Ahk2Exe.exe보다 한 단계 높은 폴더에 위치해야 합니다 (예, \AutoHotkey.exe vs \Compiler\Ahk2Exe.exe). 또 Ahk2Exe는 설정을 다음 레지스트리 키에 저장한다는 것에도 주목하십시오: HKEY_CURRENT_USER\Software\AutoHotkey\Ahk2Exe.

Run 명령어가 게임이나 프로그램을 기동시키지 못하는가?

어떤 프로그램은 자신만의 디렉토리에서 시작할 필요가 있습니다 (잘 모르겠다면, 보통 그렇게 하는 것이 가장 좋습니다). 예를 들어:

Run, %A_ProgramFiles%\Some Application\App.exe, %A_ProgramFiles%\Some Application

어떻게 명령 줄 연산의 출력 결과를 열람할 수 있는가?

테스트에 의하면 파일 캐슁 때문에, 임시 파일은 상대적으로 작은 출력에 아주 빠를 수 있습니다. 사실, 그 파일이 사용된 후 곧바로 삭제된다면, 실제로 디스크에 씌여지지 조차 않는 경우가 종종 있습니다. 예를 들어:

RunWait %comspec% /c dir > C:\My Temp File.txt
FileRead, VarToContainContents, C:\My Temp File.txt
FileDelete, C:\My Temp File.txt

임시 파일의 사용을 피하려면 (특히 출력이 클 때), Run 명령어에 예제에 보여준 바와 같이 Shell.Exec() 메쏘드의 사용을 고려해 보십시오.

어떻게 스크립트가 다른 스크립트를 닫고, 멈추며, 또는 보류하도록 만들 수 있는가?

먼저, 다음은 또다른 스크립트를 닫는 예입니다:

DetectHiddenWindows On  ; 스크립트의 숨겨진 메인 창을 탐지되도록 허용합니다.
SetTitleMatchMode 2  ; 아래 파일의 전체 경로를 지정할 필요를 회피합니다.
WinClose Script's File Name.ahk - AutoHotkey  ; 이것을 갱신하여 스크립트의 이름을 반영합니다 (대소문자 구분).

또다른 스크립트를 보류하거나 또는 정지하려면, 위에서 마지막 줄을 다음으로 교체합니다:

PostMessage, 0x111, 65305,,, Script's File Name.ahk - AutoHotkey  ; Suspend.
PostMessage, 0x111, 65306,,, Script's File Name.ahk - AutoHotkey  ; Pause.

스크립트를 끝내지 않고 어떻게 반복 행위를 멈출 수 있는가?

전체 스크립트를 키가 눌릴 때 정지하거나 재개하려면, 핫키를 Pause 명령어에 할당합니다. 다음 예제와 같이:

^!p::Pause  ; Ctrl+Alt+P를 눌러 정지합니다. 다시 누르면 재개합니다.

회돌이 안에서 반복되는 행위를 멈추려면, 다음의 작동하는 예제를 연구해 보십시오. 핫키 하나로 반복 행위를 시작하고 멈춥니다. 다른 말로 하면, 핫키를 한번 누르면 회돌이를 시작합니다. 그 핫키를 다시 누르면 회돌이를 멈춥니다.

#MaxThreadsPerHotkey 3
#z::  ; Win+Z 핫키 (이 핫키를 여러분의 기호에 맞게 변경합니다).
#MaxThreadsPerHotkey 1
if KeepWinZRunning  ; 이것은 아래의 쓰레드가 이미 아래의 회돌이를 실행중이라는 뜻입니다.
{
    KeepWinZRunning := false  ; 쓰레드의 회돌이를 멈추게 하는 신호입니다.
    return  ; 이 쓰레드를 끝냅니다. 이 아래의 코드가 실행을 재개합니다. 위의 줄에서 바뀐 곳에 주목하십시오.
}
; 그렇지 않으면:
KeepWinZRunning := true
Loop
{
    ; 다음 네 줄은 반복하고 싶은 행위입니다 (여러분의 기호에 맞게 바꿉니다):
    ToolTip, Win-Z를 다시 눌러 이것이 떨리는 것을 멈춥니다.
    Sleep 1000
    ToolTip
    Sleep 1000
    ; 그러나 아래의 나머지는 그대로 둡니다.
    if not KeepWinZRunning  ; 사용자가 Win-Z를 다시 눌러 회돌이를 멈추라고 신호를 보냈습니다.
        break  ; 이 회돌이를 빠져 나갑니다.
}
KeepWinZRunning := false  ; 이 핫키가 다음에 눌릴 때를 대비하여 재설정합니다.
return

어떻게 게임을 위해 수행성능을 향상시킬 수 있는가? CPU가 크게 부담이 될 경우 어떻게 하는가?

스크립트의 핫키, 클릭, 또는 전송이 보통 때보다 현저하게 느리다면, CPU가 엄청난 부담을 지고 있어서 그렇다면, 스크립트의 처리-우선순위를 높이면 도움이 될 수 있습니다. 이렇게 하려면, 다음 줄을 스크립트 상단 근처에 포함합니다:

Process, Priority, , High

어떻게 오토핫키 명령어를 위한 문맥 감지 도움말을 다른 편집기에서 사용할 수 있는가?

라젯(Rajat) 씨가 다음 스크립트를 만들었습니다.

웹 페이지가 적재를 끝냈는지 어떻게 아는가?

인터넷 익스플로러라면, 아마도 가장 믿을만한 방법은 DllCall과 COM을 www.autohotkey.com/forum/topic19256.html에 시연하는 것처럼 사용하는 것입니다. 관련해서 한가지 덧붙이면, 주소 바와 상태 바의 내용은 www.autohotkey.com/forum/topic19255.html에 보여주는 것처럼 열람할 수 있습니다.

예전의, 신뢰가 덜한 방법: 다음 예제에서의 테크닉은 대부분의 페이지에 대하여 MS 인터넷 익스플로러에 작동할 것입니다. 비슷한 테크닉을 다른 브라우저에서도 사용할 수 있습니다:

Run, www.yahoo.com
MouseMove, 0, 0  ; 상태 바에 마우스를 올리면 링크를 보여주지 못하게 막습니다. 대신 "Done"이 보입니다.
WinWait, Yahoo! - 
WinActivate 
StatusBarWait, Done, 30
if ErrorLevel
   MsgBox 대기 시간이 끝났거나 창이 닫혔습니다. 
else 
   MsgBox 페이지가 적재를 마쳤습니다.

날짜와 시간을 어떻게 비교하고 조작하는가?

EnvAdd 명령어는 날짜, 시간, 분, 초를 더하고 빼서 시간-문자열로 만들 수 있습니다. 형식은 YYYYMMDDHH24MISS입니다. 다음 예제는 지정된 시간에서 7일을 뺍니다: EnvAdd, VarContainingTimestamp, -7, days.

두 날짜나 시간 사이의 양을 결정하려면 EnvSub를 참조하십시오. 안에 예제가 있습니다. 또한, 내장 변수 A_Now에는 현재의 지역 시간이 담겨 있습니다. 마지막으로, 여러 내장 날짜/시간 변수가 있습니다. 뿐만 아니라 FormatTime 명령어로 맞춤 날짜/시간 문자열을 만들 수 있습니다.

현재 날짜/시간을 어떻게 전송하는가?

FormatTime 또는 날짜와 시간을 위한 내장 변수들을 사용하십시오.

어떻게 텍스트를 비활성화 상태의 창 또는 보이지 않는 창에 전송할 수 있는가?

ControlSend를 사용하십시오.

핫스트링, Send, 그리고 Click이 어떤 게임에서는 효과가 없는가?

모든 게임이 AHK가 전송하는 키와 클릭 또는 픽셀 컬러를 허용하는 것은 아닙니다.

그러나 대안이 있습니다. 아래에 언급한 모든 해결책들을 시도해 보십시오. 모든 것이 실패하면, 아마도 AHK로는 게임을 작동시킬 수 없을 것입니다. 종종 게임이 GameGuard나 Hackshield 같은 핵과 치트 방지 수단을 갖추고 있는 경우가 있습니다. 그렇다면, 그 게임에는 오토핫키가 작동하지 않을 가능성이 아주 높습니다.

어떻게 Winamp를 제어할 수 있는가? 작동하지 않을 때에도 제어하고 싶다.

Winamp 자동화하기를 참조하십시오.

어떻게 MsgBox의 버튼 이름을 바꿀 수 있는가?

다음 예제를 참조하십시오.

어떻게 기본 편집기를 바꿀 수 있는가? 문맥 메뉴나 트레이 아이콘으로 접근하고 싶다.

편집기 예제 섹션에서 기본 편집기를 바꾸는 스크립트를 보실 수 있습니다.

GUI 관련 변수의 내용을 어떻게 저장하는가?

Gui Submit을 사용합니다. 예를 들어:

Gui, Add, Text,, 텍스트를 입력하고 Submit을 누릅니다:
Gui, Add, Edit, vAssociatedVar
Gui, Add, Button,, Submit
Gui, Show
Return

ButtonSubmit:
Gui, Submit, NoHide
MsgBox, 편집 콘트롤의 내용: %AssociatedVar%
Return

AHK로 어떻게 그리는가?

틱(tic)이 집필한 GDI+ 표준 라이브러리를 참조하십시오. Gui를 사용하여 기본적인 메쏘드들을 사용할 수 있지만, 제한적입니다.

창이 열리거나, 닫히거나 또는 [비]활성화될 때 어떻게 행위를 촉발시킬 수 있는가?

WinWait, WinWaitClose 또는 WinWait[Not]Active를 사용합니다. 더 자세한 정보는 공동체가-이끄는 FAQ (윈도우즈 섹션)를 참조하십시오.

백신 프로그램이 AHK를 맬웨어라고 진단했다. 진짜 바이러스가 들어있는가?

당연히 아닙니다. 안티바이러스 프로그램은 AHK를 맬웨어로 잘못 진단할 수 있습니다. (거짓 긍정이라고 부름). 스크립트가 UPX (AHK 1.0 기본값, AHK 1.1 제거) 또는 MPRESS (AHK 1.1 선택적) 같은 압축기로 컴파일되어 실행될 때 그럴 가능성이 있습니다. 압축기는 컴파일된 스크립트의 크기를 줄일 수 있습니다. 컴파일된 실행화일을 꼭 압축해야 할 필요가 없다면, 압축기의 사용을 자제해서 안티바이러스 프로그램으로부터 거짓 경고를 받지 않는 것이 좋습니다. 여러분은 물론 잠재적인 다른 사용자를 위해서 말이지요.

핫키, 핫스트링, 그리고 리맵핑

어떻게 핫키와 핫스트링을 컴퓨터가 기동할 때 자동으로 적용되도록 만들 수 있는가?

시작 메뉴에 시작이라는 폴더가 있습니다. 스크립트에 대한 단축아이콘을 그 폴더에 넣으십시오. 그러면 그 스크립트는 컴퓨터가 시작할 때마다 자동으로 시작합니다. 단축아이콘을 만들려면:

  1. 스크립트 파일을 찾습니다. 선택한 다음 Control-C를 누릅니다.
  2. 시작 버튼을 우클릭합니다 (전형적으로 화면 좌하에 있습니다) 그리고 "Explore All Users"를 클릭합니다.
  3. 프로그램 폴더 안의 시작 폴더를 찾아 갑니다.
  4. 메뉴바에서 Edit -> Paste Shortcut을 선택합니다. 스크립트를 가리키는 단축아이콘이 이제 시작 폴더에 배치됩니다.

마우스 버튼을 핫키처럼 작동시키는데 어려움을 겪고 있다. 조언이 있는가?

왼쪽 오른쪽 마우스 버튼은 보통 할당이 가능합니다 (예를 들어, #LButton::는 Win+LeftButton 핫키입니다). 비슷하게, 가운데 버튼과 마우스 휠의 회전은 보통 할당이 가능합니다. 단, 마우스 드라이버가 버튼을 직접적으로 제어하는 경우는 제외합니다.

네 번째 버튼 (XButton1)과 다섯 번째 버튼(XButton2)은 마우스 드라이버가 클릭을 시스템에 보이도록 허용하면 할당이 가능할 수도 있습니다. 보이지 않거나 -- 또는 마우스가 버튼이 다섯개가 넘어가면 -- 마우스에 함께 따라온 소프트웨어를 조정해서 (보통 제어판이나 시작 메뉴로 접근할 수 있을 것입니다) 이런 버튼을 누를 때마다 키누름을 전송하도록 시도해 보아야 합니다. 그런 키눌림은 스크립트에서 핫키로 정의할 수 있습니다. 예를 들어, 네 번째 버튼이 Control+F1를 전송하도록 구성했다면, ^F1::를 사용하여 스크립트에 간접적으로 그 버튼을 핫키로 구성할 수 있습니다.

다섯 버튼 마우스를 가지고 있는데 네 번째 버튼과 다섯 번째 버튼은 보이지 않는다면, 마우스 드라이버를 운영체제에 포함된 기본 드라이버로 바꾸어 볼 수 있습니다. 이것은 여러분의 특별한 마우스를 위한 전용 드라이버가 있고 거기에서 제공되는 특별한 특징이 없어도 살수 있다고 가정합니다.

탭과 스페이스는 어떻게 핫키로 정의할 수 있는가?

문자가 아니라 키의 이름을 사용하십시오 (Tab 그리고 Space). 예를 들어, #Space는 Win+Space이고 ^!Tab은 Control+Alt+Tab입니다.

키나 마우스 버튼을 어떻게 리맵할 수 있는가? 마치 다른 키처럼 보이게 하고 싶다.

이 주제는 리맵핑 페이지에 기술되어 있습니다.

키나 버튼이 두 번 눌리는 것을 어떻게 탐지하는가?

다음과 같이 핫키에 내장 변수를 사용하십시오:

~Ctrl::
    if (A_ThisHotkey = A_PriorHotkey && A_TimeSincePriorHotkey < 200)
        MsgBox 두번-눌렀습니다
return

어떻게 핫키핫스트링을 어떤 프로그램에는 배제할 수 있는가? 다른 말로 하면, 특정 창이 활성화되어 있을 때를 제외하고 어떤 키를 그냥 보통 때처럼 작동시키고 싶다.

선호되는 방법은 #IfWinActive입니다. 예를 들어:

#IfWinActive, ahk_class Notepad
^a::MsgBox 노트패드가 활성화되어 있는 동안 Control-A를 눌렀습니다.

어떻게 접두 키를 아무것도 하지 않는 대신에 그의 원래 기능을 수행하도록 만들 수 있는가?

다음 예제를 연구해 보십시오. Numpad0를 접두 키로 만듭니다:

Numpad0 & Numpad1::MsgBox, Numpad0을 누르고 있는 동안 Numpad1을 눌렀습니다.

이제, 위와 같이 핫키를 기동하는데 사용되지 않을 경우 Numpad0가 실제 Numpad0 키눌림을 전송하도록 만들려면, 다음 핫키를 추가합니다:

 $Numpad0::Send, {Numpad0}

$ 접두사는 무한 회돌이를 경고하는 대화상자가 나타나는 것을 막기 위해 필요합니다 (핫키가 "자기 자신을 전송"하기 때문입니다). 게다가, 위의 행위는 키에서 손을 뗄 때 일어납니다.

어떻게 Win+U (Utility Manager) 그리고 Win+R (Run) 같은 내장 윈도우즈 단축 키를 바꾸거나 불능으로 만들 수 있는가?

다음은 예제들을 참조하십시오.

핫스트링에 와일드카드나 정규 표현식을 사용할 수 있는가?

폴리테네(polyethene)가 작성한 스크립트를 사용하십시오 (예제들이 포함되어 있습니다).

키보드 레이아웃에 없는 핫키를 어떻게 사용할 수 있는가?

특수 키들을 참조하십시오.

키보드에 특별한 000 키가 있다. 이것을 핫키로 변환할 수 있는가?

그렇습니다. 다음 예제 스크립트는 000 키를 등호 키로 바꿉니다. Send, = 줄을 원하는 대로 바꾸어서 행위를 바꿀 수 있습니다.