자주 묻는 질문(FAQ)

목차

언어 구문

General Troubleshooting

일반적 과업

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

언어 구문

언제 인용 부호를 명령어와 그의 매개변수에 사용하는가?

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

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

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

For further explanation of how percent signs are used, see Legacy Syntax and Dynamic Variables. Percent signs can also have other meanings:

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

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

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

General Troubleshooting

What can I do if AutoHotkey won't install?

7-zip Error: Use 7-zip or a compatible program to extract the setup files from the installer EXE, then run setup.exe or Installer.ahk (drag and drop Installer.ahk onto AutoHotkeyU32.exe).

AutoHotkey's installer comes packaged as a 7-zip self-extracting archive which attempts to extract to the user's Temp directory and execute a compiled script. Sometimes system policies or other factors prevent the files from being extracted or executed. Usually in such cases the message "7-zip Error" is displayed. Manually extracting the files to a different directory may help.

Setup hangs: If the setup window comes up blank or not at all, try one or both of the following:

Other: The suggestions above cover the most common problems. For further assistance, post on the forums.

How do I restore the right-click context menu options for .ahk files?

Normally if AutoHotkey is installed, right-clicking an AutoHotkey script (.ahk) file should give the following options:

Sometimes these options are overridden by settings in the current user's profile, such as if Open With has been used to change the default program for opening .ahk files. This can be fixed by deleting the following registry key:

HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.ahk\UserChoice

This can be done by applying this registry patch.

It may also be necessary to repair the default registry values, either by reinstalling AutoHotkey or by running AutoHotkey Setup (from the Start menu) and selecting apply near the top of the window.

왜 스크립트에서 어떤 줄들은 전혀 실행되지 않는가?

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

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

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

Why doesn't my script work on Windows xxx even though it worked on a previous version?

There are many variations of this problem, such as:

If you've switched operating systems, it is likely that something else has also changed and may be affecting your script. For instance, if you've got a new computer, it might have different drivers or other software installed. 또 새로운 버전의 오토핫키로 업그레이드했다면, 예전에는 어떤 버전이었는지 알아보고 변경 기록호환성 노트를 점검해 보십시오.

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

Also refer to the following question:

How do I work around problems caused by User Account Control (UAC)?

User Account Control (UAC) is a common cause of problems, especially when moving from Windows XP/Vista/7 to Vista/7/8/10. Although it is present in Windows Vista and later, it is enabled by default on new systems or new installs, and it is more difficult to disable on Windows 8 and later.

By default, UAC protects "elevated" programs (that is, programs which are running as admin) from being automated by non-elevated programs, since that would allow them to bypass security restrictions. Hotkeys are also blocked, so for instance, a non-elevated program cannot spy on input intended for an elevated program.

UAC may also prevent SendPlay and BlockInput from working.

Common workarounds are as follows:

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

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

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

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

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

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

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

어떻게 코드에서 에러를 찾아 고치는가?

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

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

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

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

If the program you are trying to start is in %A_WinDir%\System32 and you are using AutoHotkey 32-bit on a 64-bit system, the File System Redirector may be interfering. To work around this, use %A_WinDir%\SysNative instead; this is a virtual directory only visible to 32-bit programs running on 64-bit systems.

Why are the non-ASCII characters in my script displaying or sending incorrectly?

Short answer: Save the script as UTF-8 with BOM.

Although AutoHotkey supports Unicode text, it is optimized for backward-compatibility, which means defaulting to the ANSI encoding rather than the more internationally recommended UTF-8. AutoHotkey will not automatically recognize a UTF-8 file unless it begins with a byte order mark.

In other words, UTF-8 files which lack a byte order mark are misinterpreted, causing non-ASCII characters to be decoded incorrectly. To resolve this, save the file as UTF-8 with BOM or add the /CP65001 command line switch.

To save as UTF-8 with BOM in Notepad, select UTF-8 from the Encoding drop-down in the Save As dialog.

To read other UTF-8 files which lack a byte order mark, use FileEncoding UTF-8-RAW, the *P65001 option with FileRead, or "UTF-8-RAW" for the third parameter of FileOpen(). The -RAW suffix can be omitted, but in that case any newly created files will have a byte order mark.

Note that INI files accessed with the standard INI commands do not support UTF-8; they must be saved as ANSI or UTF-16.

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

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

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

어떻게 게임을 위해 성능을 향상시킬 수 있는가? 다시 말해 CPU에 엄청난 부담이 있을 때는 어떻게 개선하는가?

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

Process, Priority, , High

My antivirus program flagged AutoHotkey or a compiled script as malware. Is it really a virus?

Although it is certainly possible that the file has been infected, most often these alerts are false positives, meaning that the antivirus program is mistaken. One common suggestion is to upload the file to an online service such as virustotal or Jotti and see what other antivirus programs have to say. If in doubt, you could send the file to the vendor of your antivirus software for confirmation. This might also help us and other AutoHotkey users, as the vendor may confirm it is a false positive and fix their product to play nice with AutoHotkey.

False positives might be more common for compiled scripts which have been compressed, such as with UPX (default for AutoHotkey 1.0 but not 1.1) or MPRESS (optional for AutoHotkey 1.1). As the default AutoHotkey installation does not include a compressor, compiled scripts are not compressed by default.

일반적 과업

어디에서 공식적인 배포본, 또는 예전 배포본을 찾을 수 있는가?

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

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

AutoHotkey.exe의 이식성을 참조하십시오.

Note that when you compile a script that uses auto-included function libraries, AutoHotkey.exe and the Lib folder must be up one level from Ahk2Exe.exe (e.g. \AutoHotkey.exe vs \Compiler\Ahk2Exe.exe). 또 Ahk2Exe는 설정을 다음 레지스트리 키에 저장한다는 것에도 주목하십시오: HKCU\Software\AutoHotkey\Ahk2Exe. The compiler itself (Ahk2Exe) is not needed to run scripts.

어떻게 명령어 줄 연산의 출력 결과를 얻을 수 있는가?

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

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() 메쏘드의 사용을 고려해 보십시오.

How can a script close, pause, suspend or reload other script(s)?

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

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

To suspend, pause or reload another script, replace the last line above with one of these:

PostMessage, 0x0111, 65305,,, ScriptFileName.ahk - AutoHotkey  ; Suspend.
PostMessage, 0x0111, 65306,,, ScriptFileName.ahk - AutoHotkey  ; Pause.
PostMessage, 0x0111, 65303,,, ScriptFileName.ahk - AutoHotkey  ; Reload.

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

전체 스크립트를 키가 눌릴 때 정지하거나 재개하려면, 핫키를 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

어떻게 오토핫키 명령어에 대하여 문맥 감지 도움말을 편집기에 사용할 수 있는가?

라젯(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를 사용하십시오.

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를 사용합니다.

There are also user-created solutions such as OnWin.ahk and [How to] Hook on to Shell to receive its messages.

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

컴퓨터가 시작할 때마다 어떻게 핫키와 핫스트링을 자동으로 작동하게 만드는가?

There are several ways to make a script (or any program) launch automatically every time you start your PC. The easiest is to place a shortcut to the script in the Startup folder:

  1. 스크립트 파일을 찾습니다. 선택한 다음 Ctrl+C를 누릅니다.
  2. Press Win+R to open the Run dialog, then enter shell:startup and click OK or Enter. This will open the Startup folder for the current user. To instead open the folder for all users, enter shell:common startup (however, in that case you must be an administrator to proceed).
  3. Right click inside the window, and click "Paste Shortcut". 스크립트를 가리키는 단축아이콘이 이제 시작 폴더에 배치됩니다.

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

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

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

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

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

문자가 아니라 키의 이름을 사용하십시오 (Tab 그리고 Space). 예를 들어, #SpaceWin+Space이고 ^!TabCtrl+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 (유틸리티 관리자) 그리고 Win+R (실행) 같은 키들을, 바꾸거나 불능으로 만들 수 있는가?

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

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

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

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

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

나의 키패드는 특수한 000 키를 가지고 있다. 그것도 핫키로 바꿀 수 있는가?

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