½ºÅ©¸³Æ®ÀÇ È£È¯¼º

AutoHotkey 1.0À¸·Î ÀÛ¼ºµÈ ½ºÅ©¸³Æ®´Â ´ëºÎºÐ AutoHotkey 1.1 À§¿¡¼­ ¾Æ¹« º¯°æ¾øÀÌ ½ÇÇàµË´Ï´Ù. ±×·¯³ª ¸î °¡Áö ±â´ÉÀº µÎ ¹öÀü »çÀÌÀÇ ¾î¶³ ¼ö ¾ø´Â Â÷ÀÌÁ¡ ¶§¹®¿¡ Á¦´ë·Î ÀÛµ¿ÇÏÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. °¡Àå ¹®Á¦°¡ µÇ´Â Â÷ÀÌÁ¡Àº DllCall °°Àº °í±Þ ±â´É¿¡¸¸ ¿µÇâÀ» ¹ÌÄ¡±â ¶§¹®¿¡, ´ëºÎºÐÀÇ »ç¿ëÀÚ´Â ½Å°æ¾µ ÇÊ¿ä°¡ ¾ø½À´Ï´Ù.

AutoHotkey 1.1Àº "AutoHotkey_L"À̶ó°íµµ ¾Ë·ÁÁ® Àִµ¥, ¹Ý¸é¿¡ AutoHotkey 1.0Àº ¿ªÀ¸·Î "AutoHotkey Basic"À̶ó´Â ¶óº§ÀÌ ºÙ¾ú½À´Ï´Ù. AutoHotkey_LÀÇ ¿¹Àü ¹öÀü Áß¿¡´Â 1.0.* ¹öÀü ¹øÈ£¸¦ »ç¿ëÇÕ´Ï´Ù. ±×·¡¼­ ¸íÈ®ÇÏ°Ô Çϱâ À§ÇØ, ÀÌ ¹®¼­´Â ¿ÀÅäÇÖÅ°ÀÇ µÎ ºÐ±â¸¦ ¹öÀü ¹øÈ£°¡ ¾Æ´Ï¶ó À̸§À¸·Î ÁöĪÇÕ´Ï´Ù.

ÁÖÀÇ: °¡Àå ÈçÇÑ ¹®Á¦´Â À¯´ÏÄÚµå ÅؽºÆ®¸¦ Áö¿øÇϵµ·Ï º¯°æÇÑ ¶§¹®Àε¥, ÀÌ´Â ±×³É ANSI ¹öÀüÀÇ AutoHotkey_L¸¦ »ç¿ëÇϸé ÇÇÇÒ ¼ö ÀÖ½À´Ï´Ù.

񃧯

Å« Ãæ°Ý:

Áß°£ Ãæ°Ý:

ÀÛÀº Ãæ°Ý:

°í±Þ

񃧯

±¸¹® ¿¡·¯

AutoHotkey Basic¿¡¼­ ¿ëÀεǾú´ø ¾î¶² ±¸¹® ¿¡·¯´Â ÀÌÁ¦ ´õ ÀÌ»ó AutoHotkey_L¿¡¼­ ¿ë³³ÇÏÁö ¾Ê½À´Ï´Ù. ±×·± ¿¡·¯´Â ´ëºÎºÐ ½Äº°Çϱ⸸ ÇÏ¸é ½±°Ô ±³Á¤ÇÒ ¼ö ÀÖ½À´Ï´Ù. ´ÙÀ½ ¿¡·¯´Â ½ºÅ©¸³Æ®¸¦ AutoHotkey_L¿¡¼­ ±âµ¿ÇÏÀÚ ¸¶ÀÚ Áï½Ã ŽÁöµË´Ï´Ù. ±³Á¤ÇØ¾ß ½ºÅ©¸³Æ®¸¦ ½ÇÇàÇÒ ¼ö ÀÖ½À´Ï´Ù:

´Ù¸¥ ¾î¶² ±¸¹® ¿¡·¯´Â ½ºÅ©¸³Æ®°¡ ½ÇÇà ÁßÀÏ ¶§ ŽÁöµË´Ï´Ù. ¿¡·¯ ¸Þ½ÃÁö¸¦ ¸ÕÀú º¸¿©ÁØ ´ÙÀ½¿¡ ÇöÀç ¾²·¹µå¸¦ Á¾·áÇÕ´Ï´Ù:

¾î¶² ±¸¹® ¿¡·¯´Â ÇöÀç ŽÁöµÇÁö ¾ÊÁö¸¸, AutoHotkey_L¿¡ ¹®Á¦¸¦ ÀÏÀ¸Åµ´Ï´Ù:

FileRead

FileRead´Â º¸ÅëÀÇ °æ¿ì ÄÚµå ÆäÀÌÁö »çÀÌ¿¡ ÅؽºÆ®¸¦ º¯È¯ÇÕ´Ï´Ù. ±×·¯¹Ç·Î ºÎÆÐÇÑ ÀÌÁø µ¥ÀÌÅ͸¦ Ãâ·ÂÇÒ °¡´É¼ºÀÌ ÀÖ½À´Ï´Ù. À̸¦ ÇÇÇÏ·Á¸é *c ¿É¼ÇÀ» Ãß°¡Çϰųª ´ë½Å¿¡ FileOpenÀ» »ç¿ëÇϽʽÿÀ.

º¯¼ö À̸§°ú ÇÔ¼ö À̸§

[, ] ±×¸®°í ?´Â Ç¥Çö½Ä¿¡ »ç¿ëÀÌ ¿¹¾àµÇ¾î ÀÖ½À´Ï´Ù. ±×·¡¼­ ´õ ÀÌ»ó º¯¼ö À̸§À¸·Î À¯È¿ÇÏÁö ¾Ê½À´Ï´Ù. °á·ÐÀûÀ¸·Î, ?´Â (»ïÁø ¿¬»ê¿¡ »ç¿ëµÊ) ´õ ÀÌ»ó ¾çÂÊ¿¡ ½ºÆäÀ̽º°¡ ¾ø¾îµµ µË´Ï´Ù. °´Ã¼ ±¸¹®À» ÂüÁ¶ÇϽʽÿÀ.

¿¡·¯´Â ÀÚµ¿À¸·Î ŽÁöµÉ ¼öµµ ÀÖ°í ¾Æ´Ò ¼öµµ ÀÖ½À´Ï´Ù:

Transform

Transform ÇÏÀ§-¸í·É¾î Áß ÀϺδ À¯´ÏÄÚµå ¹öÀüÀÇ AutoHotkey_L¿¡¼­ º¯°æµÇ°Å³ª »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù:

±âº» ½ºÅ©¸³Æ®

AutoHotkey_L°¡ ½ºÅ©¸³Æ®¸¦ ÁöÁ¤ÇÏÁö ¾Ê°í ±âµ¿Çϸé, .ini ÆÄÀÏ ´ë½Å¿¡ .ahk ÆÄÀÏÀÌ ÀûÀçµË´Ï´Ù. ÀÌ ÆÄÀÏÀÇ À̸§Àº ÇöÀç ½ÇÇàÆÄÀÏÀÇ ÆÄÀÏÀ̸§¿¡ µû¶ó ´Ù¸¨´Ï´Ù. ´õ ÀÚ¼¼ÇÑ °ÍÀº ½ºÅ©¸³Æ®¿¡ ¸í·É¾î ÁÙ ¸Å°³º¯¼ö¸¦ °Ç³×±â¸¦ ÂüÁ¶ÇϽʽÿÀ.

SetFormat, Integer[Fast], H

´ë¹®ÀÚ H°¡ »ç¿ëµÇ¸é, ½ÊÀ°Áø¼ö A-Fµµ ´ë¹®ÀÚ°¡ µË´Ï´Ù. AutoHotkey BasicÀº ¾ðÁ¦³ª ¼Ò¹®ÀÚ¸¦ »ç¿ëÇÕ´Ï´Ù. SetFormatÀ» ÂüÁ¶ÇϽʽÿÀ.

A_LastError

´ÙÀ½ ¸í·É¾î´Â ÀÌÁ¦ A_LastError¸¦ ¼³Á¤ÇØ µð¹ö±ëÀ» µ½½À´Ï´Ù: FileAppend, FileRead, FileReadLine, FileDelete, FileCopy, FileMove, FileGetAttrib/Time/Size/Version, FileSetAttrib/Time, FileCreateDir, RegRead, RegWrite, RegDelete. ÀÌ ¸í·É¾î¸¦ »ç¿ëÇϸé A_LastErrorÀÇ ÀÌÀü °ªÀÌ µ¤¾î ¾º¿©Áý´Ï´Ù.

MsgBox

MsgBoxÀÇ ¶È¶ÈÇÑ ½°Ç¥ 󸮰¡ ´Ù¸¥ ¸ðµç ¸í·É¾î¿Í ÀÏ°ü¼ºÀÌ ÀÖ°Ô ±×¸®°í À¯¿¬ÇÏ°Ô °³¼±µÇ¾ú½À´Ï´ô. ´ëºÎºÐÀÇ °æ¿ì, MsgBox´Â ÀǵµÇÑ ´ë·Î Àß ÀÛµ¿ÇÕ´Ï´Ù. ¾î¶² °æ¿ì´Â ½ºÅ©¸³Æ®°¡ ¿¹ÀüÀÇ ±â¹¦ÇÑ ÇàÀ§¿¡ ÀÇÁ¸ÇÏ´Â °æ¿ì ÇàÀ§¿¡ º¯È­°¡ º¸ÀÏ ¼ö ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¸é:

; ´ÙÀ½Àº ÀÌÁ¦ Ç¥Çö½Ä (Options) ´ÙÀ½¿¡ ÅؽºÆ® (Title)·Î ¹ø¿ªµË´Ï´Ù.
; ¿©·¯ ºÎ-Ç¥Çö½ÄÀ» °¡Áø ´ÜÀÏ Ç¥Çö½Ä (Text) À¸·Î ¹ø¿ªµÇÁö ¾Ê½À´Ï´Ù :
MsgBox % x, y
; ¹Ý°ýÈ£¸¦ Ãß°¡ÇÏ¸é ¿¹ÀüÀÇ ¹ø¿ªÀ» °­Á¦ÇÒ ¼ö ÀÖ½À´Ï´Ù:
MsgBox % (x, y)

; ´ÙÀ½Àº ÀÌÁ¦ ÅؽºÆ® "0, Title" ´ë½Å¿¡ ºó ´ëÈ­»óÀÚ¸¦ º¸¿©ÁÝ´Ï´Ù:
MsgBox 0, Title
; ´ÙÀ½Àº AutoHotkey_L ±×¸®°í AutoHotkey Basic¿¡¼­ ¸ðµÎ ¿¹»ó´ë·Î ÇàÀ§ÇÕ´Ï´Ù:
MsgBox 0, Title, % ""   ; ºó ´ëÈ­»óÀÚ¸¦ º¸¿©ÁÝ´Ï´Ù.
MsgBox 0`, Title        ; ÅؽºÆ® "0, Title"À» º¸¿©ÁÝ´Ï´Ù.

; ´ÙÀ½Àº ÀÌÁ¦ ÅؽºÆ® ", Title" ´ë½Å¿¡ ºó ´ëÈ­»óÀÚ¸¦ º¸¿©ÁÝ´Ï´Ù:
MsgBox,, Title

Gui +Owner

+Owner ¿É¼ÇÀ» Gui¿¡ Àû¿ëÇϸé WS_CHILD ½ºÅ¸ÀÏÀÌ Á¦°ÅµÇ°í WS_POPUP ½ºÅ¸ÀÏÀÌ ¼³Á¤µË´Ï´Ù. ÀÌ ¶§¹®¿¡ ½ºÅ¸ÀÏÀ» ¼³Á¤ÇÑ ´ÙÀ½¿¡ +Owner¸¦ »ç¿ëÇÏ¿© GuiÀÇ ºÎ¸ð âÀ» ¼³Á¤ÇÑ ½ºÅ©¸³Æ®´Â ±úÁú ¼ö ÀÖ½À´Ï´Ù.

DPI ½ºÄÉÀϸµ

DPI ½ºÄÉÀϸµÀº ±âº»ÀûÀ¸·Î ½ºÅ©¸³Æ® GUI¿¡ ÄÑÁý´Ï´Ù. ÀÌ ¶§¹®¿¡ DPI ¼³Á¤ÀÌ 96 (100%)ÀÌ ¾Æ´Ï¸é ½ºÅ©¸³Æ®¿¡ ¿µÇâÀ» ¹ÌĨ´Ï´Ù. À̸¦ ²ô·Á¸é, Gui -DPIScale¸¦ »ç¿ëÇϽʽÿÀ.

Windows Vista ÀÌÈÄÀÇ Sound ¸í·É¾î

SoundSet, SoundGet, SoundSetWaveVolume ±×¸®°í SoundGetWaveVolume Windows Vista ÀÌÈÄ¿¡ °³¼±µÇ¾ú½À´Ï´Ù. ÀüÇüÀûÀÎ ÇàÀ§ÀÇ º¯È­·Î:

~Æ¿µå¿Í ¸ÂÃã Á¶ÇÕ ÇÖÅ°

v1.1.14 ºÎÅÍ, Æ¿µå Á¢µÎ ½Éº¼Àº ¸ÂÃã Á¶ÇÕ¿¡ ¼ö½Ä Å°·Î »ç¿ëµÉ ¶§ Å°°¡ ÀÛµ¿ÇÏ´Â ¹æ½Ä¿¡ ¿µÇâÀ» ¹ÌĨ´Ï´Ù.

¸ÂÃã Á¶ÇÕÅ°¿Í Down/Up ÇÖÅ°

Æ¿µå Á¢µÎ ½Éº¼ÀÌ »ç¿ëµÇ´Â °æ¿ì¸¦ Á¦¿ÜÇÏ°í, Å°-´Ù¿î°ú Å°-¾÷ ÇÖÅ°°¡ ¸ÂÃã ¼ö½Ä Å°·Î Á¤ÀǵǾî ÀÖ´Ù¸é, Å°¸¦ ¶¿ ¶§ µÑ ¸ðµÎ ÃË¹ß µË´Ï´Ù. ¿¹¸¦ µé¾î, x & y::À̸é x¸¦ ¶¿ ¶§ x::¿Í x up::°¡ ¸ðµÎ ÃË¹ß µË´Ï´Ù. ¿¹Àü¿¡´Â x::°¡ ÃË¹ß µÇÁö ¾Ê¾Ò½À´Ï´Ù.

If var is type

If var is type´Â ½Ã½ºÅÛ ·ÎÄÉÀÏÀ» ¹«½ÃÇÕ´Ï´Ù. ´Ü, StringCaseSense, LocaleÀÌ »ç¿ëµÇ¾ú´Ù¸é ¿¹¿ÜÀÔ´Ï´Ù.

â ±×·ì

GroupActivate´Â È°¼ºÈ­ ÇÒ Ã¢À» ¹ß°ßÇÏÁö ¸øÇϸé ErrorLevel¿¡ 1À» ¼³Á¤ÇÕ´Ï´Ù, ±×·¸Áö ¾ÊÀ¸¸é 0À» ¼³Á¤ÇÕ´Ï´Ù. ÀÌÀü¿¡´Â ErrorLevelÀ» º¯°æÇÏÁö ¾Ê°í ±×´ë·Î µÎ¾ú½À´Ï´Ù.

GroupAddÀÇ Label ¸Å°³º¯¼ö´Â â ±×·ì¿¡ ÀüüÀûÀ¸·Î Àû¿ëµË´Ï´Ù. ±×·ì ¾ÈÀÇ Æ¯Á¤ â ±Ô°Ý Çϳª¿¡¸¸ Àû¿ëµÇÁö ¾Ê½À´Ï´Ù. ÀÌ º¯°æ¿¡ °üÇÑ Åä·ÐÀÌ Æ÷·³¿¡ ÀÖ½À´Ï´Ù. ±×·¸Áö¸¸, ÀÌ ¸Å°³º¯¼ö¸¦ »ç¿ëÇÏ´Â °ÍÀº Ãßõ ÇÏÁö ¾Ê½À´Ï´Ù; ´ë½Å¿¡ GroupActivate¸¦ È£ÃâÇÑ ÈÄ¿¡ ErrorLevelÀ» Á¡°ËÇϽʽÿÀ.

Run / RunWait

AutoHotkey_LÀº Run°ú RunWait ¸í·É¾î°¡ ¸ñÇ¥(Target) ¸Å°³º¯¼ö¸¦ ¹ø¿ªÇÏ´Â ¹æ½ÄÀÌ ¾à°£ °³¼±µÇ¾ú½À´Ï´Ù. ÀÌ ¶§¹®¿¡ ¾ÆÁÖ Èñ±ÍÇÑ °æ¿ìÀ̱â´Â ÇÏÁö¸¸, ¿¹Àü¿¡´Â ÀÛµ¿ÇÏÁö ¾Ê´ø °ÍµéÀÌ ÀÛµ¿ÇÏ°Ô µÇ¾î AutoHotkey Basic¿¡¼­ ÀÌ¹Ì Àß ÀÛµ¿ÇÏ´Â ½ºÅ©¸³Æ®¿¡ ¿µÇâÀ» ¹ÌÄ¥ ¼ö ÀÖ½À´Ï´Ù. »õ·Î¿î ÇàÀ§´Â ´ÙÀ½°ú °°½À´Ï´Ù:

Control-Z

Loop Read ±×¸®°í FileReadLine´Â ´õ ÀÌ»ó ¹®ÀÚ Control-Z (0x1A)¸¦ ÆÄÀÏ ³¡ Ç¥½ÄÀ¸·Î ÀÌÇØÇÏÁö ¾Ê½À´Ï´Ù. Control-Z´Â ¸ðµÎ, ÆÄÀÏ ¸Ç ³¡¿¡ ¿À´õ¶óµµ, ±×´ë·Î ÀûÀçµË´Ï´Ù. FileRead´Â ÀÌ¹Ì ÀÌ ¹®ÀÚ¸¦ ¹«½ÃÇÕ´Ï´Ù. ±×·¡¼­ ÀÌ ¹®Á¦¿¡ ¿µÇâÀ» ¹ÞÁö ¾Ê½À´Ï´Ù.

ȣȯ ¸ðµå

½ºÅ©¸³Æ®¸¦ ½ÇÇàÇÏ´Â µ¥ »ç¿ëµÈ EXE ÆÄÀÏÀÇ Æ¯¼º¿¡ ȣȯ ¸ðµå°¡ Windows 95, 98/ME ¶Ç´Â NT4·Î ¼³Á¤µÇ¾ú´Ù¸é, ±× ½ºÅ©¸³Æ®´Â ¿Ã¹Ù¸£°Ô ÀÛµ¿ÇÏÁö ¸øÇÕ´Ï´Ù. ¿Ö³ÄÇϸé ȣȯ ¸ðµå ¶§¹®¿¡ ƯÁ¤ ¹öÀüÀÇ Windows°¡ ¾îÇø®ÄÉÀ̼ǿ¡ º¸°íµÇÁö¸¸, AutoHotkey_LÀº ÀÌ·± ¹öÀüÀ» Áö¿øÇÏÁö ¾Ê±â ¶§¹®ÀÔ´Ï´Ù. ¿¹¸¦ µé¾î, ȣȯ ¸ðµå¸¦ Windows 95 or 98/ME¿¡ ¼³Á¤Çϸé MsgBox %A_OSVersion%´Â WIN_NT4¶ó°í º¸°íÇÕ´Ï´Ù.

A_IsCompiled

A_IsCompiled´Â ½ºÅ©¸³Æ®°¡ ÄÄÆÄÀϵÇÁö ¾Ê¾Ò´Ù¸é ºó ¹®ÀÚ¿­·Î Á¤Àǵ˴ϴÙ. ÀÌÀü¿¡´Â Á¤ÀǵÇÁö ¾ÊÀº ä ±×´ë·Î µÎ¾ú½À´Ï´Ù. ±× ¶§¹®¿¡ ½ºÅ©¸³Æ®°¡ ÄÄÆÄÀϵÇÁö ¾Ê¾ÒÀ½¿¡µµ A_IsCompiled := 1¿Í °°Àº ÇÒ´çÀÌ À¯È¿Çß¾ú½À´Ï´Ù. ÀÌÁ¦´Â ¸ðµç °æ¿ì¿¡ Àбâ Àü¿ë ³»Àå º¯¼ö·Î Ãë±ÞµË´Ï´Ù.

°ø¹é ¹®ÀÚ ÇǽÅ

`t¿Í ` °°Àº ÇǽŠ°ø¹é¹®ÀÚ´Â ´õ ÀÌ»ó °¢ ÀÎÀÚÀÇ ¾Õ µÚ¿¡¼­ Á¦°ÅµÇÁö ¾Ê½À´Ï´Ù. ¿¹¸¦ µé¾î, StringReplace s, s, `t´Â ÀÌÁ¦ À¯È¿ÇÏ¸ç ¸ðµç ÅÇ ¹®ÀÚ¸¦ s·ÎºÎÅÍ Á¦°ÅÇÕ´Ï´Ù.

Unicode vs ANSI

ÅؽºÆ® °ªÀº Á¾Á¾ ¹®ÀÚ¿­(string)À̶ó°í ºÎ¸¨´Ï´Ù. °¢ ÅؽºÆ®ÀÇ °ªÀÌ ¹®ÀÚ¿­ÀÇ ¿¬¼Ó ¶Ç´Â ÁÙÁö¾î(string) ÀúÀåµÇ¾î Àֱ⠶§¹®ÀÔ´Ï´Ù. °¢ ¹®ÀÚÀÇ ¼ýÄ¡ ¹®ÀÚ ÄÚµå¿Í Å©±â (¹ÙÀÌÆ® ´ÜÀ§)´Â ¾î´À ¹öÀüÀÇ AutoHotkey¸¦ »ç¿ëÇÏ°í Àִ°¡¿¡ ´Þ·Á ÀÖ½À´Ï´Ù: Unicode ¶Ç´Â ANSI. ÀÌ·± ¼¼ºÎ »çÇ×Àº ´ÙÀ½°ú °°Àº ÀÏÀ» ÇÏ·Á´Â ½ºÅ©¸³Æ®¿¡ ÀüÇüÀûÀ¸·Î Áß¿äÇÕ´Ï´Ù:

ÇÑ °¡Áö Çü½Ä¸¸ ¿°µÎ¿¡ µÎ°í ¼³°èµÈ ½ºÅ©¸³Æ®´Â Á¾Á¾ ¾û¶×ÇÑ ¹öÀüÀÇ AutoHotkey·Î ½ÇÇàÇÒ ¶§ ¹®Á¦¿¡ ºÀÂøÇÕ´Ï´Ù. ¿¹¸¦ µé¸é, ¾î¶² ½ºÅ©¸³Æ®°¡ AutoHotkey Basic¿ëÀ¸·Î ÀÛ¼ºµÇ¾ú´Ù¸é ANSI ¹öÀüÀÇ AutoHotkey_L¿¡¼­´Â Àß ÀÛµ¿ÇÏÁö¸¸ À¯´ÏÄÚµå ¹öÀü¿¡¼­´Â ½ÇÆÐÇÕ´Ï´Ù. ¾î´À ¹öÀüÀ» »ç¿ëÇÏ°í ÀÖ´ÂÁö Àß ¸ð¸£°Ú´Ù¸é, ´ÙÀ½ ½ºÅ©¸³Æ®¸¦ ½ÇÇàÇØ º¸½Ê½Ã¿À:

MsgBox % A_IsUnicode ? "Unicode" : "ANSI"

ANSI: °¢ ¹®ÀÚ´Â ÇÑ ¹ÙÀÌÆ® (8 ºñÆ®)ÀÔ´Ï´Ù. 127À» ³Ñ´Â ¹®ÀÚ ÄÚµå´Â ½Ã½ºÅÛÀÇ ¾ð¾î ¼³Á¤¿¡ µû¶ó ´Þ¶óÁý´Ï´Ù.

Unicode: °¢ ¹®ÀÚ´Â µÎ ¹ÙÀÌÆ® (16 ºñÆ®)ÀÔ´Ï´Ù. ¹®ÀÚ ÄÚµå´Â UTF-16 Çü½ÄÀ¸·Î Á¤Àǵ˴ϴÙ.

Àṉ̀¸Á¶ ÁÖÀÇ: ±â¼úÀûÀ¸·Î, ¾î¶² À¯´ÏÄÚµå ¹®ÀÚ´Â µÎ °³ÀÇ 16-ºñÆ® ÄÚµå ´ÜÀ§·Î Ç¥ÇöµË´Ï´Ù. ÇÕÃļ­ "´ë¸® ½Ö(surrogate pair)"¶ó°í ºÎ¸¨´Ï´Ù. ºñ½ÁÇÏ°Ô, ¾î¶² ANSI ÄÚµå ÆäÀÌÁö´Â (º¸Åë DBCS(Double Byte Character Sets)¶ó°í ºÎ¸§) µÎ ¹ÙÀÌÆ® ¹®ÀÚ¸¦ ´ã°í ÀÖ½À´Ï´Ù. ±×·¸Áö¸¸, ½Ç¿ëÀûÀÎ ÀÌÀ¯·Î, À̰͵éÀ» °ÅÀÇ ¾ðÁ¦³ª µÎ °³ÀÇ °³º° ´ÜÀ§·Î Ãë±ÞÇÕ´Ï´Ù (´Ü¼øÇÏ°Ô Çϱâ À§ÇØ ±×³É "¹®ÀÚ(characters)"¶ó°í ºÎ¸¨´Ï´Ù).

VarSetCapacity

VarSetCapacity´Â º¯¼öÀÇ °¡¿ë ´É·ÂÀ» ¹ÙÀÌÆ® ´ÜÀ§·Î ¼³Á¤ÇÕ´Ï´Ù. º¯¼öÀÇ °¡¿ë´É·ÂÀ» ¹®ÀÚÀÇ °³¼ö¿¡ ±â¹ÝÇÏ¿© ¼³Á¤ÇÏ·Á¸é, ¹®ÀÚÀÇ Å©±â¸¦ ¹Ýµå½Ã °í·ÁÇØ¾ß ÇÕ´Ï´Ù. ¿¹¸¦ µé¾î:

VarSetCapacity(ansi_var,    capacity_in_chars)
VarSetCapacity(unicode_var, capacity_in_chars * 2)
VarSetCapacity(native_var,  capacity_in_chars * (A_IsUnicode ? 2 : 1))
VarSetCapacity(native_var,  t_size(capacity_in_chars))  ; ¾Æ·¡ ÂüÁ¶

´ÙÀ½Àº VarSetCapacityÀÇ µÎ °¡Áö ÁÖ¿ä »ç¿ë¹ýÀÔ´Ï´Ù:

  1. ¿¹ÃøÇÑ °³¼öÀÇ ¹®ÀÚ¸¦ º¸À¯Çϵµ·Ï º¯¼ö¸¦ È®ÀåÇÕ´Ï´Ù. ±×¸®ÇÏ¿© Á¡ÁøÀû °áÇÕÀ» ÅëÇØ ¹®ÀÚ¿­À» ±¸¼ºÇÒ ¶§ ¼öÇ༺´ÉÀ» °³¼±ÇÒ ¼ö ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¾î, VarSetCapacity(var, 1000)´Â 1000 ¹ÙÀÌÆ®¸¦ Çã¿ëÇÕ´Ï´Ù. ÀÌ°ÍÀº À¯´ÏÄÚµå ¹öÀüÀÇ AutoHotkey_L¿¡¼­´Â 500 ¹®ÀÚ¿¡ ºÒ°úÇÕ´Ï´Ù. ÀÌ·¸°Ô ÇÏ¸é ¼öÇ༺´É¿¡ ¿µÇâÀ» ¹ÌÄ¥ ¼ö ÀÖÁö¸¸, ½ºÅ©¸³Æ®´Â ¿©ÀüÈ÷ ¿Ã¹Ù¸£°Ô ÀÛµ¿ÇÕ´Ï´Ù.
  2. º¯¼ö Å©±â¸¦ Á¶Á¤ÇØ ÀÌÁø ±¸Á¶Ã¼¸¦ ´ã½À´Ï´Ù. ±¸Á¶Ã¼¿¡ Á÷Á¢ÀûÀ¸·Î ÅؽºÆ®°¡ ´ã°Ü ÀÖ´Ù¸é, ±× ÅؽºÆ®ÀÇ Çü½ÄÀ» ¹Ýµå½Ã °í·ÁÇØ¾ß ÇÕ´Ï´Ù. Çü½ÄÀº ±¸Á¶Ã¼¿¡ µû¶ó ´Ù¸¨´Ï´Ù - ¾î¶² °æ¿ì´Â À¯´ÏÄÚµå ¹öÀüÀÇ AutoHotkey_L¿¡¼­µµ ANSI ÅؽºÆ®°¡ »ç¿ëµË´Ï´Ù. º¯¼ö°¡ ³Ê¹« ÀÛÀ¸¸é, ½ºÅ©¸³Æ®´Â Ãæµ¹Çϰųª ¾Æ´Ï¸é ¿¹»óÇÏÁö ¸øÇÑ ÇàÀ§¸¦ ÇÒ ¼ö ÀÖ½À´Ï´Ù (±¸Á¶Ã¼¸¦ ¾î¶»°Ô »ç¿ëÇϴ°¡¿¡ µû¶ó).

DllCall

"Str" À¯ÇüÀÌ »ç¿ëµÉ ¶§, ÇöÀç ºôµåÀÇ °íÀ¯ À¯ÇüÀÇ ¹®ÀÚ¿­À̶ó´Â ¶æÀÔ´Ï´Ù. ¾î¶² ÇÔ¼ö´Â ƯÁ¤ÇÑ ÇüÅÂÀÇ ¹®ÀÚ¿­À» ¿ä±¸Çϰųª µ¹·ÁÁֱ⠶§¹®¿¡, ´ÙÀ½ÀÇ ¹®ÀÚ¿­ À¯ÇüÀ» »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù:

 ¹®ÀÚ Å©±âC / Win32 TypesÀÎÄÚµù
WStr16-ºñÆ®wchar_t*, WCHAR*, LPWSTR, LPCWSTRUTF-16
AStr8-ºñÆ®char*, CHAR*, LPSTR, LPCSTRANSI (½Ã½ºÅÛ ±âº» ANSI ÄÚµå ÆäÀÌÁö)
Str--TCHAR*, LPTSTR, LPCTSTRÀ¯´ÏÄÚµå ºôµåÀÇ WStr ±×¸®°í ANSI ºôµåÀÇ AStr°ú µ¿µî.

"Str" ¶Ç´Â ÇöÀç ºôµå¿¡ ´ëÇÏ¿© ±×¿Í µ¿µîÇÑ À¯ÇüÀÌ ¸Å°³º¯¼ö·Î »ç¿ëµÇ¸é, ±× ¹®ÀÚ¿­ ¶Ç´Â º¯¼öÀÇ ÁÖ¼Ò°¡ ÇÔ¼ö¿¡ °Ç³×Áý´Ï´Ù. ±×·¸Áö ¾ÊÀ¸¸é ´ë½Å¿¡ ¹®ÀÚ¿­ÀÇ Àӽà »çº»ÀÌ ¿øÇÏ´Â Æ÷¸ËÀ¸·Î »ý¼ºµÇ°í °Ç³×Áý´Ï´Ù. ÀϹÝÀûÀ¸·Î, "AStr" ±×¸®°í "WStr"Àº ÇÔ¼ö°¡ ±× ¸Å°³º¯¼ö¿¡ º¯¼ö¸¦ ¾µ ¶§ »ç¿ëÇÏ¸é ¾È µË´Ï´Ù.

ÁÖÀÇ: "AStr" ±×¸®°í "WStr"Àº ¸Å°³º¯¼ö¿¡ ´ëÇÏ¿© ±×¸®°í ±× ÇÔ¼öÀÇ ¹Ýȯ °ª¿¡ ´ëÇÏ¿© ¶È °°ÀÌ À¯È¿ÇÕ´Ï´Ù.

ÀϹÝÀûÀ¸·Î, ½ºÅ©¸³Æ®°¡ ¹®ÀÚ¿­À» ¸Å°³º¯¼ö·Î ¹Þ´Â ÇÔ¼ö¸¦ DllCall¸¦ ÅëÇÏ¿© È£ÃâÇϸé, ´ÙÀ½ Á¢±Ù¹ý Áß Çϳª¸¦ ÃëÇØ¾ß ÇÕ´Ï´Ù:

  1. ÇÔ¼ö¸¦ Unicode (W) ¹öÀü°ú ANSI (A) ¹öÀüÀ¸·Î ¸ðµÎ »ç¿ëÇÒ ¼ö ÀÖÀ¸¸é, ÇöÀç ºôµå¿¡ ´ëÇÏ¿© ÀûÀýÇÑ ¹öÀüÀ» È£ÃâÇÕ´Ï´Ù. ´ÙÀ½ ¿¹Á¦¿¡¼­, "DeleteFile"Àº ³»ºÎÀûÀ¸·Î "DeleteFileA" ¶Ç´Â "DeleteFileW"À̶ó°í ºÎ¸¨´Ï´Ù. "DeleteFile" ÀÚü´Â ½ÇÁ¦·Î Á¸ÀçÇÏÁö ¾ÊÀ¸¹Ç·Î, DllCallÀº ÀÚµ¿À¸·Î ÇöÀç ºôµå¿¡ ´ëÇÏ¿© ÀûÀýÇÏ°Ô "A" ¶Ç´Â "W"¸¦ ½ÃµµÇÕ´Ï´Ù:
    DllCall("DeleteFile", "Ptr", &filename)
    DllCall("DeleteFile", "Str", filename)

    ´ÙÀ½ ¿¹Á¦¿¡¼­, &filenameÀº ¹®ÀÚ¿­ÀÇ ÁÖ¼Ò¸¦ Á¤È®ÇÏ°Ô ÀÖ´Â ±×´ë·Î °Ç³Ü´Ï´Ù. ±×·¡¼­ ÇÔ¼ö´Â ¹®ÀÚ¿­À» "Str" À¯Çü°ú °°Àº Çü½ÄÀ̶ó°í ¿¹»óÇØ¾ß ÇÕ´Ï´Ù. AutoHotkey Basic¿¡¼­ "UInt"¸¦ "Ptr" ´ë½Å¿¡ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ±×·¯³ª °á°ú ÄÚµå´Â 64-ºñÆ®¿Í ȣȯµÇÁö ¾Ê½À´Ï´Ù.

    ÁÖÀÇ: ÇÔ¼ö¸¦ Á¤È®ÇÏ°Ô ÁöÁ¤µÈ ´ë·Î ¹ß°ßÇÒ ¼ö ¾øÀ¸¸é, AutoHotkey_LÀº ¾î´À DLLÀÌ ÁöÁ¤µÇ¾î Àִ°¡¿¡ »ó°ü ¾øÀÌ "A" ¶Ç´Â "W" Á¢µÎ»ç¸¦ µ¡ºÙÀÔ´Ï´Ù. ±×·¸Áö¸¸, AutoHotkey BasicÀº User32.dll, Kernel32.dll, ComCtl32.dll, ¶Ç´Â Gdi32.dll¿¡ ÀÖ´Â ÇÔ¼ö¿¡ ´ëÇؼ­¸¸ "A" Á¢µÎ»ç¸¦ ºÙÀÔ´Ï´Ù.

  2. ÇÔ¼ö°¡ ¿ÀÁ÷ ƯÁ¤ À¯ÇüÀÌ ¹®ÀÚ¿­¸¸ ÀÔ·ÂÀ¸·Î ¹Þ´Â´Ù¸é, ±× ½ºÅ©¸³Æ®´Â ÀûÀýÇÑ ¹®ÀÚ¿­ À¯ÇüÀ» »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù:
    DllCall("DeleteFileA", "AStr", filename)
    DllCall("DeleteFileW", "WStr", filename)
  3. ÇÔ¼ö°¡ (ºñ-°íÀ¯ Çü½ÄÀ¸·Î) ¹®ÀÚ¿­À» ¼öÁ¤ÇØ¾ß ÇÑ´Ù¸é, ½ºÅ©¸³Æ®´Â ¹öÆÛ¸¦ À§¿¡ ±â¼úÇÑ ´ë·Î ÇÒ´çÇÏ°í ±×ÀÇ ÁÖ¼Ò¸¦ ÇÔ¼ö¿¡ °Ç³×¾ß ÇÕ´Ï´Ù. ¸Å°³º¯¼ö°¡ ÀÔ·ÂÀ» ¹Þ´Â´Ù¸é, ½ºÅ©¸³Æ®´Â ¶ÇÇÑ ÀÔ·Â ¹®ÀÚ¿­µµ ÀûÀýÇÑ Çü½ÄÀ¸·Î º¯È¯ÇØ¾ß ÇÕ´Ï´Ù; StrPutÀ» »ç¿ëÇÏ¸é º¯È¯ÇÒ ¼ö ÀÖ½À´Ï´Ù.

NumPut / NumGet

NumPutÀ̳ª NumGetÀÌ ¹®ÀÚ¿­¿¡ »ç¿ëµÉ ¶§, ÁÖ¾îÁø À¯ÇüÀÇ ¹®ÀÚ¿­¿¡ ´ëÇÏ¿© ¿ÀÇÁ¼Â°ú À¯ÇüÀÌ Á¤È®ÇØ¾ß ÇÕ´Ï´Ù. ´ÙÀ½À» ÁöħÀ¸·Î »ïÀ¸½Ê½Ã¿À:

;  8-bit/ANSI   strings:  size_of_char=1  type_of_char="Char"
; 16-bit/UTF-16 strings:  size_of_char=2  type_of_char="UShort"
nth_char := NumGet(var, (n-1)*size_of_char, type_of_char)
NumPut(nth_char, var, (n-1)*size_of_char, type_of_char)

var¿¡ À½¼ö ÇüÅÂÀÇ ¹®ÀÚ¿­ÀÌ µé¾î ÀÖ´Ù¸é, ÀûÀýÇÑ °ªÀº A_IsUnicode¿¡ ±â¹ÝÇÏ¿© °áÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù:

nth_char := NumGet(var, t_size(n-1), t_char())
NumPut(nth_char, var, t_size(n-1), t_char())

; Æí¸®¼º°ú ¸í·á¼ºÀ» À§ÇØ ÇÔ¼ö¸¦ Á¤ÀÇÇÕ´Ï´Ù:
t_char() {
    return A_IsUnicode ? "UShort" : "Char"
}
t_size(char_count=1) {
    return A_IsUnicode ? char_count*2 : char_count
}

Æ÷ÀÎÅÍ Å©±â

Æ÷ÀÎÅÍ Å©±â´Â 32-ºñÆ® ºôµå¿¡ ´ëÇÏ¿© 4 ¹ÙÀÌÆ® (AutoHotkey Basic Æ÷ÇÔ) 64-ºñÆ® ºôµå¿¡ ´ëÇÏ¿© 8 ¹ÙÀÌÆ®ÀÔ´Ï´Ù. ±¸Á¶Ã¼³ª DllCallÀ» »ç¿ëÇÏ´Â ½ºÅ©¸³Æ®´Â µÎ Ç÷§Æû¿¡¼­ ¸ðµÎ ¿Ã¹Ù¸£°Ô ÀÛµ¿ÇÏ·Á¸é ÀÌ »ç½ÇÀ» °í·ÁÇÒ ÇÊ¿ä°¡ ÀÖ½À´Ï´Ù. ¿µÇâÀ» ¹Þ´Â ±¸Ã¼ÀûÀÎ ¿µ¿ªÀº ´ÙÀ½°ú °°½À´Ï´Ù:

Å©±â¿Í ¿ÀÇÁ¼Â °è»êÀº A_PtrSizeÀ» »ç¿ëÇϽʽÿÀ. DllCall, NumPut ±×¸®°í NumGet¿¡´Â ÀûÀýÇÏ°Ô Ptr À¯ÇüÀ» »ç¿ëÇϽʽÿÀ.

ÇʵåÀÇ ¿ÀÇÁ¼ÂÀº º¸Åë ±× ¾Õ¿¡ ÀÖ´Â ¸ðµç ÇʵåÀÇ Àüü Å©±âÀÓÀ» ±â¾ïÇϽʽÿÀ. ¶Ç Çڵ鵵 (HWND¿Í HBITMAP °°Àº À¯ÇüÀ» Æ÷ÇÔÇÏ¿©) º»ÁúÀûÀ¸·Î Æ÷ÀÎÅÍ-À¯ÇüÀÓÀ» ¸í½ÉÇϽʽÿÀ.

/*
  typedef struct _PROCESS_INFORMATION {
    HANDLE hProcess;    // Ptr
    HANDLE hThread;
    DWORD  dwProcessId; // UInt (4 bytes)
    DWORD  dwThreadId;
  } PROCESS_INFORMATION, *LPPROCESS_INFORMATION;
*/
VarSetCapacity(pi, A_PtrSize*2 + 8) ; Ptr + Ptr + UInt + UInt
DllCall("CreateProcess", <omitted for brevity>, "Ptr", &pi, <omitted>)
hProcess    := NumGet(pi, 0)         ; Defaults to "Ptr".
hThread     := NumGet(pi, A_PtrSize) ;
dwProcessId := NumGet(pi, A_PtrSize*2,     "UInt")
dwProcessId := NumGet(pi, A_PtrSize*2 + 4, "UInt")