DllCall()

Ç¥ÁØ Windows API ÇÔ¼ö °°ÀÌ, DLL¾ÈÀÇ ÇÔ¼ö¸¦ È£ÃâÇÕ´Ï´Ù.

Result := DllCall("[DllFile\]Function" [, Type1, Arg1, Type2, Arg2, "Cdecl ReturnType"])

¸Å°³º¯¼ö

Result

DllCallÀº ÇÔ¼ö°¡ µ¹·ÁÁÖ´Â ½ÇÁ¦ °ªÀ» µ¹·ÁÁÝ´Ï´Ù. ÇÔ¼ö°¡ °ªÀ» µ¹·ÁÁÖÁö ¾Ê´Â À¯ÇüÀ̶ó¸é, ±× °á°ú´Â Á¤ÀǵÇÁö ¾ÊÀº Á¤¼öÀÔ´Ï´Ù. ¿¡·¯ ¶§¹®¿¡ ÇÔ¼ö¸¦ È£ÃâÇÒ ¼ö ¾ø´Ù¸é, ±× °á°ú °ªÀº ºñ¾î ÀÖ½À´Ï´Ù(ºó ¹®ÀÚ¿­).

[DllFile\]Function

DLLÀ̳ª EXE ÆÄÀÏ À̸§ ´ÙÀ½¿¡ ¿ª»ç¼± ±×¸®°í ÇÔ¼öÀÇ À̸§ÀÌ µû¶ó¿É´Ï´Ù. ¿¹¸¦ µé¾î: "MyDLL\MyFunction" (È®ÀåÀÚ°¡ »ý·«µÇ¸é ".dll"ÀÌ ±âº»°ªÀÔ´Ï´Ù). Àý´ë °æ·Î¸¦ ÁöÁ¤ÇÏÁö ¾ÊÀ¸¸é, DllFileÀº ½Ã½ºÅÛ PATH ¶Ç´Â A_WorkingDir¿¡ ÀÖ´Ù°í °£Áֵ˴ϴÙ.

DllFileÀº User32.dll, Kernel32.dll, ComCtl32.dll, ¶Ç´Â Gdi32.dll¿¡ °ÅÁÖÇÏ´Â ÇÔ¼öµéÀ» È£ÃâÇÒ ¶§ »ý·«ÇÒ ¼ö ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¾î, "User32\IsWindowVisible"´Â "IsWindowVisible"¿Í °á°ú°¡ °°½À´Ï´Ù.

ÇÔ¼ö°¡ ÁÖ¾îÁø À̸§À¸·Î ¹ß°ßµÇÁö ¾ÊÀ¸¸é, A (ANSI) ¶Ç´Â W (Unicode) Á¢¹Ì»ç¸¦ ¾î´À ¹öÀüÀÇ ¿ÀÅäÇÖÅ°°¡ ½ºÅ©¸³Æ®¸¦ ½ÇÇàÁßÀΰ¡¿¡ ±â¹ÝÇÏ¿© ÀÚµ¿À¸·Î Ãß°¡ÇÕ´Ï´Ù. ¿¹¸¦ µé¾î, "MessageBox"´Â ANSI ¹öÀüÀº "MessageBoxA" ±×¸®°í À¯´ÏÄÚµå ¹öÀüÀº "MessageBoxW"¿Í °°½À´Ï´Ù.

¹Ýº¹ÀûÀ¸·Î DLL¿¡ È£ÃâÇÒ °æ¿ì ¹Ì¸® ÀûÀçÇÏ¸é ¼öÇ༺´ÉÀ» ±ØÀûÀ¸·Î Çâ»ó½Ãų ¼ö ÀÖ½À´Ï´Ù.

v1.0.46.08+¿¡¼­, ÀÌ ¸Å°³º¯¼ö´Â Á¤¼ö ¸¸À¸·Î ±¸¼ºµÉ ¼ö ÀÖ½À´Ï´Ù. È£ÃâÇÒ ÇÔ¼öÀÇ ÁÖ¼Ò·Î ¹ø¿ªµË´Ï´Ù. ±×·± ÁÖ¼ÒÀÇ ¼Ò½º·Î´Â COM ±×¸®°í RegisterCallback()ÀÌ Æ÷ÇԵ˴ϴÙ.

Type1, Arg1

°¢ ½Ö¸¶´Ù ÇÔ¼ö¿¡ °Ç³×Áú ÇϳªÀÇ ¸Å°³º¯¼ö¸¦ ³ªÅ¸³À´Ï´Ù. ½ÖÀÇ °³¼ö´Â Á¦ÇÑÀÌ ¾ø½À´Ï´Ù. Type¿¡ °üÇÑ °ÍÀº ¾Æ·¡ÀÇ À¯Çü Å×À̺íÀ» ÂüÁ¶ÇϽʽÿÀ. Arg¿¡ ´ëÇÏ¿©, ÇÔ¼ö¿¡ °Ç³Ú °ªÀ» ÁöÁ¤ÇÕ´Ï´Ù.

Cdecl ReturnType

´Ü¾î CdeclÀº º¸Åë »ý·«ÇÕ´Ï´Ù. ´ëºÎºÐÀÇ ÇÔ¼ö°¡ Ç¥ÁØ È£Ãâ °ü·Ê¸¦ »ç¿ëÇÏÁö "C" È£Ãâ °ü·Ê¸¦ »ç¿ëÇÏÁö´Â ¾Ê±â ¶§¹®ÀÔ´Ï´Ù (wsprintf ÇÔ¼ö¿Í °°ÀÌ °¡º¯ °³¼öÀÇ ÀÎÀÚ¸¦ ¹Þ´Â ÇÔ¼ö´Â ¿¹¿Ü·Î ÇÕ´Ï´Ù). CdeclÀ» »ý·«ÇßÁö¸¸ È£Ãâ¿¡¼­ ErrorLevel An¸¦ »êÃâÇÑ´Ù¸é -- ¿©±â¿¡¼­ n´Â °Ç³Ù ÀÎÀÚµéÀÇ ÃÑ Å©±âÀÔ´Ï´Ù -- CdeclÀÌ ÇÊ¿äÇÒ ¼ö ÀÖ½À´Ï´Ù. ´ëºÎºÐÀÇ °´Ã¼-ÁöÇâ C++ ÇÔ¼ö´Â thiscall °ü·Ê¸¦ »ç¿ëÇÏÁö¸¸, ÀÌ´Â Áö¿øÇÏÁö ¾Ê½À´Ï´Ù.

Á¸ÀçÇÑ´Ù¸é, ´Ü¾î CdeclÀº ¹Ýȯ À¯Çüº¸´Ù (ÀÖ´Ù¸é) ¸ÕÀú ³ªÅ¸³ª¾ß ÇÕ´Ï´Ù. ´ÙÀ½ ´Ü¾î¿Í ½ºÆäÀ̽º³ª ÅÇÀ¸·Î ºÐ¸®ÇϽʽÿÀ. ¿¹¸¦ µé¾î: "Cdecl Str".

[AHK_L 53+]: º°µµ·Î "C" È£Ãâ °ü·Ê´Â 64-ºñÆ® Äڵ忡 Á¸ÀçÇÏÁö ¾Ê±â ¶§¹®¿¡, CdeclÀ» ÁöÁ¤Çصµ 64-ºñÆ® ºôµåÀÇ ¿ÀÅäÇÖÅ°¿¡¼­´Â ¾Æ¹« È¿°ú°¡ ¾øÀ» ¼ö ÀÖ½À´Ï´Ù.

ReturnType: ÇÔ¼ö°¡ 32-ºñÆ® ºÎÈ£ÀÖ´Â Á¤¼ö (Int), BOOLÀ» µ¹·ÁÁְųª, ¶Ç´Â ¾Æ¹«°Íµµ µ¹·ÁÁÖÁö ¾ÊÀ¸¸é, ReturnTypeÀ» »ý·«ÇÒ ¼ö ÀÖ½À´Ï´Ù. ±×·¸Áö ¾ÊÀ¸¸é, ¾Æ·¡ÀÇ À¯Çü Å×ÀÌºí¿¡ ÀÖ´Â ÀÎÀÚ Áß Çϳª¸¦ ÁöÁ¤ÇϽʽÿÀ. º°Ç¥ Á¢¹Ì»çµµ Áö¿øµË´Ï´Ù.

ÀÎÀÚÀÇ À¯Çü°ú ¹Ýȯ °ª

Str

"Blue"³ª MyVar °°Àº ¹®ÀÚ¿­. È£ÃâµÈ ÇÔ¼ö°¡ ±× ¹®ÀÚ¿­À» º¯°æÇÏ°í ÀÎÀÚ°¡ ºñº¸È£ º¯¼öÀ̸é, ±×ÀÇ ³»¿ëÀÌ °»½ÅµË´Ï´Ù. ¿¹¸¦ µé¾î, ´ÙÀ½ È£ÃâÀº MyVarÀÇ ³»¿ëÀ» ´ë¹®ÀÚ·Î º¯°æÇÕ´Ï´Ù: DllCall("CharUpper", "Str", MyVar).

±×·¸Áö¸¸, ÇÔ¼ö°¡ ÇÑ º¯¼öÀÇ ÇöÀç ³»¿ëº¸´Ù ´õ Å« ¹®ÀÚ¿­À» ÀúÀåÇϵµ·Ï ¼³°èµÇ¾ú´Ù¸é, º¯¼ö°¡ ÃæºÐÈ÷ ´õ Å«Áö ¸ÕÀú Á¡°ËÇÑ ´ÙÀ½ ±× ÇÔ¼ö¸¦ È£ÃâÇϽʽÿÀ. VarSetCapacity(MyVar, 123)¸¦ È£ÃâÇØ º¸¸é ¾Ë ¼ö ÀÖ½À´Ï´Ù. ¿©±â¿¡¼­ 123Àº MyVar°¡ º¸À¯ÇÒ ¼ö ÀÖ´Â ±æÀÌÀÔ´Ï´Ù.

Str ÀÎÀÚ´Â ¼ýÀÚ·Î Æò°¡µÇ´Â Ç¥Çö½ÄÀÌ µÇ¸é ¾È µË´Ï´Ù (¿¹¸¦ µé¾î, i+1). ±×·¸´Ù¸é, ÇÔ¼ö´Â È£ÃâµÇÁö ¾ÊÀ¸¸ç ErrorLevelÀº -2·Î ¼³Á¤µË´Ï´Ù.

º°Ç¥ º¯¼ö "Str*"Àº Áö¿øµÇÁö¸¸ °ÅÀÇ »ç¿ëµÇÁö ¾Ê½À´Ï´Ù. "TCHAR **" ¶Ç´Â "LPTSTR *" °°Àº °ÍÀ» ±â´ëÇÏ´Â ÇÔ¼ö¿Í ÇÔ²² »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.

ÁÖÀÇ: ¹®ÀÚ¿­À» ÇÔ¼ö¿¡ °Ç³Ú ¶§, ÇÔ¼ö°¡ ¾î¶² À¯ÇüÀÇ ¹®ÀÚ¿­À» ±â´ëÇÏ´ÂÁö ÀÎÁöÇØ¾ß ÇÕ´Ï´Ù.

AStr
WStr
[AHK_L 42+]: ANSI ¹®ÀÚ¿­ ¶Ç´Â Unicode (Wide character) ¹®ÀÚ¿­. µ¿µîÇÑ Win32 À¯Çü°ú ±âŸ ÀÚ¼¼ÇÑ »çÇ×Àº ½ºÅ©¸³Æ® ȣȯ¼ºÀ» ÂüÁ¶ÇϽʽÿÀ.
Int64 64-ºñÆ® Á¤¼ö·Î¼­, ¹üÀ§´Â -9223372036854775808 (-0x8000000000000000)ºÎÅÍ 9223372036854775807 (0x7FFFFFFFFFFFFFFF)±îÁöÀÔ´Ï´Ù.
Int

32-ºñÆ® Á¤¼ö·Î¼­ (ÀϹÝÀûÀÎ Á¤¼ö À¯Çü), ¹üÀ§´Â -2147483648 (-0x80000000)ºÎÅÍ 2147483647 (0x7FFFFFFF)±îÁöÀÔ´Ï´Ù. Int´Â Á¾Á¾ "Long"À̶ó°íµµ ºÎ¸¨´Ï´Ù.

Int´Â ¶Ç BOOL ÀÎÀÚ¸¦ ±â´ëÇÏ´Â ÇÔ¼ö¿¡ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù (BOOL °ªÀº 1 ¶Ç´Â 0ÀÔ´Ï´Ù).

ºÎÈ£¾ø´Â Int (UInt)µµ »ó´çÈ÷ ÀÚÁÖ »ç¿ëµË´Ï´Ù. ¿¹¸¦ µé¾î DWORD.

Short 16-ºñÆ® Á¤¼ö·Î¼­ ¹üÀ§´Â -32768 (-0x8000)ºÎÅÍ 32767 (0x7FFF)±îÁöÀÔ´Ï´Ù. ºÎÈ£¾ø´Â Short (UShort)´Â WORD¸¦ ±â´ëÇÏ´Â ÇÔ¼ö¿¡ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.
Char 8-ºñÆ® Á¤¼öÀÔ´Ï´Ù. ¹üÀ§´Â -128 (-0x80)ºÎÅÍ 127 (0x7F)±îÁöÀÔ´Ï´Ù. ºÎÈ£¾ø´Â character (UChar)´Â BYTE¸¦ ±â´ëÇÏ´Â ÇÔ¼ö¿¡ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.
Float 32-ºñÆ® ºÎµ¿ ¼Ò¼öÁ¡ ¼öÀÔ´Ï´Ù. Á¤¹Ðµµ´Â 6ÀÚ¸®ÀÔ´Ï´Ù.
Double 64-ºñÆ® ºÎµ¿ ¼Ò¼öÁ¡ ¼ö. Á¤¹Ðµµ´Â 15ÀÚ¸®ÀÔ´Ï´Ù.
Ptr

[AHK_L 42+]: Æ÷ÀÎÅÍ-¤»±âÀÇ Á¤¼ö·Î¼­, . ½ºÅ©¸³Æ®¸¦ ½ÇÇàÇÏ´Â ¹öÀüÀÌ 32ºñÆ®Àΰ¡ ¾Æ´Ï¸é 64ºñÆ®Àΰ¡¿¡ µû¶ó Int ¶Ç´Â Int64¿Í µ¿µîÇÕ´Ï´Ù. PtrÀº ¹è¿­À̳ª ±¸Á¶Ã¼¸¦ °¡¸®Å°´Â Æ÷ÀÎÅÍ (RECT* ¶Ç´Â LPPOINT) ±×¸®°í °ÅÀÇ ¸ðµç ÇÚµé°ú (HWND, HBRUSH ¶Ç´Â HBITMAP) ÇÔ²² »ç¿ëÇØ¾ß ÇÕ´Ï´Ù. ¸Å°³º¯¼ö°¡ LPDWORD ¶Ç´Â int*¿Í °°ÀÌ ´ÜÀÏ ¼ýÄ¡ °ªÀ» °¡¸®Å°´Â Æ÷ÀÎÅÍÀ̸é, ÀϹÝÀûÀ¸·Î "Ptr" ´ë½Å¿¡ * ¶Ç´Â P Á¢¹Ì»ç¸¦ »ç¿ëÇØ¾ß ÇÕ´Ï´Ù.

PtrÀº ¶Ç * ¶Ç´Â P Á¢¹Ì»ç¿Íµµ »ç¿ë°¡´ÉÇÕ´Ï´Ù; LPVOID* ·ù¸¦ ÅëÇÏ¿© Æ÷ÀÎÅ͸¦ Ãâ·ÂÇÏ´Â ÇÔ¼ö¿Í ÇÔ²² »ç¿ëÇØ¾ß ÇÕ´Ï´Ù.

UPtrµµ À¯È¿ÇÏÁö¸¸, 32-ºñÆ® ºôµå¿¡¼­´Â ºÎÈ£°¡ ¾ø½À´Ï´Ù. ¿ÀÅäÇÖÅ°°¡ ºÎÈ£¾ø´Â 64-ºñÆ® Á¤¼ö¸¦ Áö¿øÇÏÁö ¾Ê±â ¶§¹®ÀÔ´Ï´Ù.

¿¹Àü ¹öÀüÀÇ ¿ÀÅäÇÖÅ°¿Í ȣȯÀÌ ÇÊ¿äÇϸé, ¾Æ·¡¿¡ º¸¿©ÁÖ´Â ¹Ù¿Í °°ÀÌ º¯¼ö À¯ÇüÀ» »ç¿ëÇϽʽÿÀ:

Ptr := A_PtrSize ? "Ptr" : "UInt" ; A_PtrSize°¡ Á¤ÀǵǾî ÀÖÁö ¾ÊÀ¸¸é ´ë½Å UInt¸¦ »ç¿ëÇÕ´Ï´Ù.
DllCall("DeleteFile", Ptr, &filename) ; Ptr µÑ·¹¿¡ ÀÎ¿ë ºÎÈ£¸¦ »ý·«ÇÕ´Ï´Ù.

ÁÖÀÇ: NULL ÇÚµéÀ̳ª Æ÷ÀÎÅ͸¦ °Ç³×·Á¸é, Á¤¼ö 0À» °Ç³×½Ê½Ã¿À.

* ¶Ç´Â P
(Á¢¹Ì»ç)

º°Ç¥¸¦ (¼±ÅÃÀûÀ¸·Î ¾Õ¿¡ ½ºÆäÀ̽º¿Í ÇÔ²²) À§ÀÇ À¯Çü¿¡ Ãß°¡ÇÏ¸é °ª ÀÚü°¡ ¾Æ´Ï¶ó ÀÎÀÚÀÇ ÁÖ¼Ò°¡ °Ç³×Áý´Ï´Ù (È£ÃâµÇ´Â ÇÔ¼ö´Â ±×°ÍÀ» ¹Þ¾ÆµéÀ̵µ·Ï ¼³°èµÇ¾î ÀÖ¾î¾ß ÇÕ´Ï´Ù). ±×·± ÀÎÀÚÀÇ °ªÀº ÇÔ¼ö°¡ º¯°æÇÒ ¼ö Àֱ⠶§¹®¿¡, naked º¯¼ö°¡ ÀÎÀÚ·Î °Ç³×Áú ¶§¸¶´Ù, ±× º¯¼öÀÇ ³»¿ëÀº °»½ÅµË´Ï´Ù. ¿¹¸¦ µé¾î, ´ÙÀ½ È£ÃâÀº MyVarÀÇ ³»¿ëÀ» MyFunction¿¡ ÁÖ¼Ò·Î °Ç³Ü´Ï´Ù. ±×·¯³ª MyVarµµ °»½ÅµÇ¾î MyFunction ÇÔ¼öÀÇ º¯°æÀ» ¹Ý¿µÇÕ´Ï´Ù: DllCall("MyDll\MyFunction", "Int*", MyVar).

ÀϹÝÀûÀ¸·Î, º°Ç¥´Â ÇÔ¼ö¿¡ ÀÎÀÚ À¯ÇüÀ̳ª ¹Ýȯ À¯ÇüÀÌ "LP"·Î ½ÃÀÛÇÒ ¶§¸¶´Ù »ç¿ëµË´Ï´Ù. °¡Àå ÈçÇÑ ¿¹´Â LPDWORDÀε¥, ÀÌ´Â DWORD °ªÀ» °¡¸®Å°´Â Æ÷ÀÎÅÍÀÔ´Ï´Ù. DWORD´Â ºÎÈ£ ¾ø´Â 32-ºñÆ® Á¤¼öÀ̱⠶§¹®¿¡ "UInt*"³ª "UintP"¸¦ »ç¿ëÇÏ¿© LPDWORD¸¦ Ç¥ÇöÇϽʽÿÀ. º°Ç¥´Â LPTSTR¿Í °°Àº ¹®ÀÚ¿­ À¯Çü, LPRECT¿Í °°ÀÌ ±¸Á¶Ã¼¸¦ °¡¸®Å°´Â Æ÷ÀÎÅÍ, ¶Ç´Â ¹è¿­¿¡ »ç¿ëÇÏ¸é ¾È µË´Ï´Ù; ¿©±â¿¡ ´ëÇؼ­´Â, º¯¼ö¸¦ °Ç³×´Â°¡ ¾Æ´Ï¸é ±×ÀÇ ÁÖ¼Ò¸¦ °Ç³×´Â°¡¿¡ µû¶ó, "Str"À̳ª "Ptr"À» »ç¿ëÇØ¾ß ÇÕ´Ï´Ù..

ÁÖÀÇ: "Char*"´Â "Str"°ú °°Áö ¾Ê½À´Ï´Ù. ¿Ö³ÄÇϸé "Char*"´Â 8-ºñÆ® ¼ýÀÚÀÇ ÁÖ¼Ò¸¦ °Ç³×´Â ¹Ý¸é¿¡, "Str"Àº ÀÏ·ÃÀÇ ¹®ÀÚ¿­ÀÇ ÁÖ¼Ò¸¦ °Ç³×±â ¶§¹®ÀÔ´Ï´Ù. ¹®ÀÚ´Â ¿ÀÅäÇÖÅ°ÀÇ ¹öÀü¿¡ µû¶ó, 8-ºñÆ® (ANSI) ¶Ç´Â 16-ºñÆ® (Unicode)ÀÏ ¼ö ÀÖ½À´Ï´Ù. ºñ½ÁÇÏ°Ô, "UInt*"´Â 32-ºñÆ® ¼ýÀÚÀÇ ÁÖ¼Ò¸¦ °Ç³Ü´Ï´Ù. ±×·¡¼­ ÇÔ¼ö°¡ °ªÀÇ ¹è¿­ ¶Ç´Â 32ºñÆ®º¸´Ù ´õ Å« ±¸Á¶¸¦ ±â´ëÇÒ °æ¿ì »ç¿ëÇÏ¸é ¾È µË´Ï´Ù.

¿ÀÅäÇÖÅ°ÀÇ º¯¼ö´Â À¯ÇüÀÌ °íÁ¤µÇ¾î ÀÖÁö ¾Ê±â ¶§¹®¿¡, ÇÔ¼ö¿¡ °Ç³×´Â ÁÖ¼Ò´Â º¯¼ö ÀÚü°¡ ¾Æ´Ï¶ó Àӽà ¸Þ¸ð¸®¸¦ °¡¸®Åµ´Ï´Ù. º¯¼ö¿¡ VarSetCapacityÀ» È£ÃâÇÒ ÇÊ¿ä°¡ ¾ø½À´Ï´Ù. ÇÔ¼ö°¡ ¹ÝȯµÇ¸é DllCalÀÌ ¿Ã¹Ù¸£°Ô ±× º¯¼ö¸¦ °»½ÅÇØ ÁÙ °ÍÀ̱⠶§¹®ÀÔ´Ï´Ù.

U (Á¢µÎ»ç)

À§ÀÇ Á¤¼ö À¯Çü ¾Õ¿¡ ¹®ÀÚ U¸¦ ¹èÄ¡ÇÏ¸é ºÎÈ£¾ø´Â Á¤¼ö·Î ¹ø¿ªµË´Ï´Ù (UInt64, UInt, UShort, ±×¸®°í UChar). ¾ö¹ÐÈ÷ ¸»ÇØ, ÀÌ°ÍÀº ¹Ýȯ °ª°ú º°Ç¥ º¯¼ö¿¡¸¸ ÇÊ¿äÇÕ´Ï´Ù. ¿Ö³ÄÇÏ¸é °ªÀ¸·Î °Ç³×¾îÁø ÀÎÀÚ°¡ ºÎÈ£°¡ ÀÖ´ÂÁö ¾ø´ÂÁö ½Å°æ¾²Áö ¾Ê±â ¶§¹®ÀÔ´Ï´Ù (Int64´Â Á¦¿Ü).

ºÎÈ£¾ø´Â ÀÎÀÚ¿¡ À½ÀÇ Á¤¼ö¸¦ ÁöÁ¤Çϸé, µÇ¸é, ±× Á¤¼ö´Â ºÎÈ£¾ø´Â ¿µ¿ªÀ¸·Î º¯È¯µË´Ï´Ù. ¿¹¸¦ µé¾î, -1À» UInt·Î º¸³»¸é, 0xFFFFFFFFÀÌ µË´Ï´Ù.

ÇÔ¼ö°¡ »ý»êÇÏ´Â Unsigned 64-ºñÆ® Á¤¼ö´Â Áö¿øÇÏÁö ¾Ê½À´Ï´Ù. ±×·¯¹Ç·Î, 0x8000000000000000 ÀÌ»óÀÇ ¼ö¿Í ÀÛ¾÷ÇÏ·Á¸é, U Á¢µÎ»ç¸¦ »ý·«ÇÏ°í ÇÔ¼ö·ÎºÎÅÍ ¹ÞÀº À½ÀÇ Á¤¼ö °ªÀº °Å´ëÇÑ Á¤¼ö·Î ¹ø¿ªÇϽʽÿÀ. ¿¹¸¦ µé¾î, -1À» Int64·Î »êÃâÇÏ´Â ÇÔ¼ö´Â ½ÇÁ¦·Î 0xFFFFFFFFFFFFFFFFÀ» »ý»êÇÏ°í ÀÖ´Â °ÍÀÔ´Ï´Ù. UInt64¸¦ »êÃâÇϵµ·Ï ¼³°èµÇ¾î ÀÖ´Ù¸é ¸»ÀÔ´Ï´Ù.

ÁÖÀÇ: ÀÎÀÚ À¯Çü ¶Ç´Â ¹Ýȯ À¯ÇüÀ» ÁöÁ¤ÇÒ ¶§ ½ºÆäÀ̽º³ª º°Ç¥°¡ µé¾î ÀÖÁö ¾ÊÀ¸¸é, ±× ÁÖÀ§¿¡ ÀοëºÎÈ£¸¦ µÎ¸£Áö ¾Ê¾Æµµ µË´Ï´Ù. ¿¹¸¦ µé¾î, StrÀ» "Str" ´ë½Å¿¡ »ç¿ëÇÒ ¼ö ÀÖ°í CDeclÀ» "CDecl" ´ë½Å »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. °Ô´Ù°¡, ¹®ÀÚ P¸¦ º°Ç¥ ´ë½Å »ç¿ëÇصµ ÀοëºÎÈ£¸¦ »ý·«ÇÒ ¼ö ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¾î: UIntP.

ErrorLevel

[v1.1.04+] ÀÌ ÇÔ¼ö´Â ½ÇÆнà ¿¹¿Ü¸¦ ´øÁú ¼ö ÀÖ½À´Ï´Ù. ´õ ÀÚ¼¼ÇÑ Á¤º¸´Â ½ÇÇà½Ã°£ ¿¡·¯¸¦ ÂüÁ¶ÇϽʽÿÀ.

ErrorLevelÀº ´ÙÀ½ °ª Áß Çϳª·Î ¼³Á¤µÇ¾î È£ÃâÀÌ ¼º°øÇß´ÂÁö ½ÇÆÐÇß´ÂÁö¸¦ ¾Ë·ÁÁÝ´Ï´Ù.

0: ¼º°ø.

-1 (À½¼ö 1): [DllFile\]Function ¸Å°³º¯¼ö´Â ºÎµ¿ ¼Ò¼öÁ¡ ¼öÀÔ´Ï´Ù. ¹®ÀÚ¿­ ¶Ç´Â À½¼ö°¡ ÇÊ¿äÇÕ´Ï´Ù.

-2: ¹Ýȯ À¯Çü ¶Ç´Â ÁöÁ¤µÈ ÀÎÀÚ À¯ÇüÁß Çϳª°¡ À¯È¿ÇÏÁö ¾Ê½À´Ï´Ù. ÀÌ ¿¡·¯´Â ¼ýÀÚ·Î Æò°¡µÇ´Â Ç¥Çö½ÄÀ» ¹®ÀÚ¿­¿¡ °Ç³×¾îµµ ÀϾ´Ï´Ù (str).

-3: ÁöÁ¤µÈ DllFile¿¡ Á¢±Ù ¶Ç´Â ÀûÀçÇÒ ¼ö ¾ø½À´Ï´Ù. DllFile ÆÄÀÏ¿¡ ¸í½ÃÀûÀ¸·Î °æ·Î°¡ ÁöÁ¤µÇÁö ¾Ê¾Ò´Ù¸é, ±× ÆÄÀÏÀº ½Ã½ºÅÛ¿¡ PATH ¶Ç´Â A_WorkingDir¿¡ Á¸ÀçÇØ¾ß ÇÕ´Ï´Ù. ÀÌ ¿¡·¯´Â »ç¿ëÀÚ°¡ ÆÄÀÏ¿¡ Á¢±Ù±ÇÇÑÀÌ ¾øÀ» °æ¿ì, ¶Ç´Â ¿ÀÅäÇÖÅ°°¡ 32ºñÆ®ÀÌ°í DLLÀÌ 64-ºñÆ® ¶Ç´Â ±× ¹Ý´ëÀÎ °æ¿ì¿¡µµ ÀϾ ¼ö ÀÖ½À´Ï´Ù.

-4: ÁöÁ¤µÈ ÇÔ¼ö¸¦ DLL ¾È¿¡¼­ ¹ß°ßÇÒ ¼ö ¾ø½À´Ï´Ù.

N (¾çÀÇ Á¤¼ö): ÇÔ¼ö°¡ È£ÃâµÇ¾úÁö¸¸ Ä¡¸íÀûÀÎ ¿¡·¯ ¹øÈ£ N°ú ÇÔ²² ½ÇÆÐÇß½À´Ï´Ù (¿¹¸¦ µé¾î, 0xC0000005´Â "¹«´Ü Á¢±Ù"À» ¶æÇÕ´Ï´Ù). ±×·± °æ¿ì, ÇÔ¼ö´Â ºó °ª(ºó ¹®ÀÚ¿­)À» µ¹·ÁÁÖÁö¸¸, º°Ç¥ º¯¼ö´Â ¸ðµÎ ¿©ÀüÈ÷ °»½ÅµË´Ï´Ù. Ä¡¸íÀûÀÎ ¿¹¿ÜÀÇ ¿¹´Â NULL°ú °°Àº ¹«È¿ÇÑ Æ÷ÀÎÅ͸¦ ÂüÁ¶ÇÏ´Â °ÍÀÔ´Ï´Ù. Cdecl ÇÔ¼ö´Â ´ÙÀ½ ¹®´Ü¿¡¼­ Àý´ë·Î "An" ¿¡·¯¸¦ »ý»êÇÏÁö ¾Ê±â ¶§¹®¿¡, ³Ê¹« ÀÎÀÚ¸¦ Àû°Ô °Ç³×¸é ¿¹¿Ü°¡ ÀϾ ¼öµµ ÀÖ½À´Ï´Ù.

An (¹®ÀÚ A ´ÙÀ½¿¡ Á¤¼ö n): ÇÔ¼ö°¡ È£ÃâµÇ¾úÁö¸¸ ÀÎÀÚ¸¦ ³Ê¹« ¸¹°Ô ¶Ç´Â ³Ê¹« Àû°Ô °Ç³Þ½À´Ï´Ù. "n"´Â ÀÎÀÚ ¸®½ºÆ®¿¡¼­ ¿Ã¹Ù¸£Áö ¾ÊÀº ¹ÙÀÌÆ®ÀÇ °³¼öÀÔ´Ï´Ù. nÀÌ ¾ç¼öÀ̸é, ³Ê¹« ¸¹Àº (¶Ç´Â ³Ê¹« Å« ÀÎÀÚ¸¦) ÀÎÀÚ¸¦ °Ç³Þ±â ¶§¹®ÀÔ´Ï´Ù. ±×·¸Áö ¾ÊÀ¸¸é CDecl·Î È£ÃâÇØ¾ß ÇÕ´Ï´Ù. nÀÌ À½¼öÀ̸é, ³Ê¹« Àû°Ô ÀÎÀÚ¸¦ °Ç³Þ±â ¶§¹®ÀÔ´Ï´Ù. ÀÌ »óȲÀº ÇÔ¼öÀÇ ¿¬»êÀÇ ½Å·Ú¼ºÀ» À§ÇØ ¹Ýµå½Ã ±³Á¤ÇØ¾ß ÇÕ´Ï´Ù. ÀÌ ¿¡·¯ÀÇ Á¸Àç´Â ¶ÇÇÑ ¿¹¿Ü°¡ ÀϾ´Ù´Â °ÍÀ» °¡¸®Åµ´Ï´Ù. ÀÌ °æ¿ì ÇÔ¼ö´Â ºó ¹®ÀÚ¿­À» µ¹·ÁÁÝ´Ï´Ù. x64 È£Ãâ °ü·Ê ¶§¹®¿¡, 64-ºñÆ® ºôµå´Â ErrorLevel¿¡ AnÀ» ¼³Á¤ÇÏÁö ¾Ê½À´Ï´Ù.

¿¹¿Ü¿Í A_LastError

³»Àå ¿¹¿Ü 󸮿¡µµ ºÒ±¸ÇÏ°í, ¿©ÀüÈ÷ ½ºÅ©¸³Æ®°¡ DllCall°ú Ãæµ¹ÇÒ °¡´É¼ºÀÌ ÀÖ½À´Ï´Ù. ÀÌ·± ÀÏÀº ÇÔ¼ö°¡ Á÷Á¢ÀûÀ¸·Î ¿¹¿Ü¸¦ ÀÏÀ¸Å°Áö ¾Ê°í Á¾·áÇÏÁö ¾Ê´Â ¹®ÀÚ¿­À̳ª ³ª»Û Æ÷ÀÎÅÍ °°ÀÌ ¹º°¡ ºÎÀûÀûÇÑ °ÍÀ» »êÃâÇÒ °æ¿ì ÀϾ ¼ö ÀÖ½À´Ï´Ù. ½ºÅ©¸³Æ®°¡ Àû´çÇÏÁö ¾ÊÀº °ªÀ» °Ç³Þ´Ù¸é, ¿¹¸¦ µé¾î, ³ª»Û Æ÷ÀÎÅͳª °¡¿ë ´É·ÂÀÌ ºÒÃæºÐÇÑ "str"À» °Ç³Þ´Ù¸é ÀÌ°ÍÀº ÇÔ¼öÀÇ À߸øÀÌ ¾Æ´Ò ¼ö ÀÖ½À´Ï´Ù. ºÎÀûÀýÇÑ ÀÎÀÚ À¯ÇüÀ̳ª ¹Ýȯ À¯ÇüÀ» ÁöÁ¤ÇÒ ¶§¿¡µµ ½ºÅ©¸³Æ®°¡ Ãæµ¹ÇÒ ¼ö ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¾î ÇÔ¼ö°¡ »ý»êÇÑ º¸ÅëÀÇ Á¤¼ö¸¦ º°Ç¥ º¯¼ö ¶Ç´Â strÀ̱⸦ ¿ä±¸Çϸé Ãæµ¹ÇÕ´Ï´Ù.

³»Àå º¯¼ö A_LastError¿¡´Â ¿î¿µ üÁ¦ÀÇ GetLastError() ÇÔ¼öÀÇ °á°ú °ªÀÌ ´ã°Ü ÀÖ½À´Ï´Ù. ÀÌ ÇÔ¼ö´Â ÇØ´ç ÇÔ¼ö°¡ È£ÃâµÈ ÈÄ¿¡ ¹Ù·Î È£ÃâµË´Ï´Ù. (ÀÌ ¶§¹®¿¡ ¹Þ´Â ¼öÇ༺´ÉÀÇ Ãæ°ÝÀº ÃøÁ¤ÇÒ ¼ö ¾ø½À´Ï´Ù). A_LastError´Â 0ºÎÅÍ 4294967295 »çÀÌÀÇ ¼ýÀÚÀÔ´Ï´Ù (¾ðÁ¦³ª ½ÊÁø¼ö·Î Æ÷¸ËµË´Ï´Ù. ½ÊÀ°Áø¼ö·Î Æ÷¸ËµÇÁö ¾Ê½À´Ï´Ù). ErrorLeveló·³, A_LastErrorÀº ¾²·¹µå¸¶´Ù ¼³Á¤µË´Ï´Ù; Áï, ´Ù¸¥ ¾²·¹µå°¡ ÀÎÅÍ·´Æ® ÇÏ´õ¶óµµ º¯ÇÏÁö ¾Ê½À´Ï´Ù. ±×·¸Áö¸¸, A_LastError´Â Run/RunWait·Îµµ ¼³Á¤µÉ ¼ö ÀÖ½À´Ï´Ù.

¼öÇ༺´É

DLLÀ» ¹Ýº¹ÀûÀ¸·Î È£ÃâÇÒ ¶§, ¸í½ÃÀûÀ¸·Î ÀûÀçÇÏ¸é ¼öÇ༺´ÉÀÌ ±ØÀûÀ¸·Î Çâ»óµË´Ï´Ù ( User32¿Í °°Àº Ç¥ÁØ DLL¿¡´Â ÇÊ¿äÇÏÁö ¾Ê½À´Ï´Ù. ¾ðÁ¦³ª ¸Þ¸ð¸®¿¡ »óÁÖÇϱ⠶§¹®ÀÔ´Ï´Ù). ÀÌ·± °ü·Ê¸¦ Â÷¿ëÇϸé DllCallÀº ³»ºÎÀûÀ¸·Î ¸Å¹ø LoadLibrary¿Í FreeLibrary¸¦ È£ÃâÇÒ ÇÊ¿ä°¡ ¾ø¾îÁý´Ï´Ù:

hModule := DllCall("LoadLibrary", "Str", "MyFunctions.dll", "Ptr")  ; ȸµ¹ÀÌ ¾È¿¡¼­ DllCall()ÀÌ ¶óÀ̺귯¸®¸¦ ÀûÀçÇÒ ÇÊ¿ä°¡ ¾ø½À´Ï´Ù.
Loop, C:\My Documents\*.*, , 1
    result := DllCall("MyFunctions\BackupFile", "Str", A_LoopFileFullPath)
DllCall("FreeLibrary", "Ptr", hModule)  ; ¸Þ¸ð¸®¸¦ Àý¾àÇϱâ À§ÇØ, DLLÀº »ç¿ëÇÑ ´ÙÀ½ ³»·Áµµ µË´Ï´Ù.

v1.0.46.08+¿¡¼­´Â ÇÔ¼öÀÇ ÁÖ¼Ò¸¦ ¹Ì¸® ã¾Æ³õÀ¸¸é ÈξÀ ´õ ºü¸£°Ô ¼öÇ༺´ÉÀ» °³¼±½Ãų ¼ö ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¾î:

; ´ÙÀ½ ¿¹Á¦¿¡¼­, DLLÀÌ ¾ÆÁ÷ ÀûÀçµÇÁö ¾Ê¾Ò´Ù¸é, GetModuleHandle ´ë½Å LoadLibrary¸¦ »ç¿ëÇÕ´Ï´Ù.
MulDivProc := DllCall("GetProcAddress", Ptr, DllCall("GetModuleHandle", Str, "kernel32", "Ptr"), AStr, "MulDiv", "Ptr")
Loop 500
    DllCall(MulDivProc, Int, 3, Int, 4, Int, 3)

[AHK_L 31+]: DllCallÀÇ Ã¹ ¹ø° ¸Å°³º¯¼ö°¡ "MulDiv"¿Í °°Àº ±âÈ£ ¹®ÀÚ¿­ÀÌ°í ±× ÇÔ¼ö¸¦ ´ã°í ÀÖ´Â DLLÀÌ º¸Åë ½ºÅ©¸³Æ®°¡ ½ÇÇàµÇ±â Àü¿¡ ÀûÀçµÇ¾î ÀÖ´Ù¸é, ±× ¹®ÀÚ¿­Àº ÀÚµ¿À¸·Î ÇÔ¼ö ÁÖ¼Ò·Î °áÁ¤µË´Ï´Ù. ÀÌ·± ³»Àå ÃÖÀûÈ­´Â À§¿¡ º¸¿©ÁØ ¿¹Á¦º¸´Ù ´õ È¿°úÀûÀÔ´Ï´Ù.

¶ÇÇÑ, ½ºÅ©¸³Æ®ÀÇ ¾Æ¹«µ¥³ª #NoEnvÁÙÀ» Ãß°¡Çϸé ÀοëºÎÈ£ ¾ø´Â ¸Å°³º¯¼ö À¯ÇüÀÌ »ç¿ëµÉ ¶§ (¿¹, Int vs. "Int") DllCallÀÇ ¼öÇ༺´ÉÀÌ Çâ»óµË´Ï´Ù.

¸¶Áö¸·À¸·Î, ¹®ÀÚ¿­-º¯¼ö¸¦ ÇÔ¼ö¿¡ °Ç³Ú ¶§ ±× ÇÔ¼ö°¡ ¹®ÀÚ¿­ÀÇ ±æÀ̸¦ º¯°æÇÏÁö ¾ÊÀ» °æ¿ì, ±× º¯¼ö¸¦ "str" ÀÌ ¾Æ´Ï¶ó (ƯÈ÷ ¹®ÀÚ¿­ÀÌ ¾ÆÁÖ ±æ ¶§) ÁÖ¼Ò·Î º¸³»¸é (¿¹, &MyVar) ¼öÇ༺´ÉÀ» Çâ»ó½Ãų ¼ö ÀÖ½À´Ï´Ù. ´ÙÀ½ ¿¹Á¦´Â ¹®ÀÚ¿­À» ´ë¹®ÀÚ·Î º¯È¯ÇÕ´Ï´Ù: DllCall("CharUpper", Ptr, &MyVar, Ptr).

±¸Á¶Ã¼¿Í ¹è¿­

±¸Á¶Ã¼´Â ¸Þ¸ð¸®¿¡ ¼­·Î ÀÌ¿ôÇØ ÀúÀåµÈ ¸â¹ö (Çʵå) Áý´ÜÀÔ´Ï´Ù. ´ëºÎºÐÀÇ ¸â¹ö´Â Á¤¼öÀÎ °æÇâÀÌ ÀÖ½À´Ï´Ù.

±¸Á¶Ã¼ÀÇ ÁÖ¼Ò¸¦ (¶Ç´Â ¸Þ¸ð¸®-ºí·Ï ¹è¿­À») ¹Þ´Â ÇÔ¼ö´Â ±× ±¸Á¶Ã¼ÀÇ ³¯ ÀÌÁø µ¥ÀÌÅ͸¦ º¸Åë º¯¼ö¿¡ ÀúÀåÇϸé È£ÃâÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀϹÝÀûÀ¸·Î ´ÙÀ½ ´Ü°è¸¦ ¹â½À´Ï´Ù:

1) VarSetCapacity(MyStruct, 123, 0)¸¦ È£ÃâÇÏ¿© ¸ñÇ¥ º¯¼ö°¡ ±× ±¸Á¶Ã¼ÀÇ µ¥ÀÌÅ͸¦ ¼ö¿ëÇÒ ¸¸Å­ ÃæºÐÇÑÁö È®ÀÎÇÕ´Ï´Ù. 123À» Àû¾îµµ ±× ±¸Á¶Ã¼ÀÇ Å©±â¸¸Å­ Å« ¼ýÀÚ·Î ±³Ã¼ÇÕ´Ï´Ù. ¼±ÅÃÀûÀ¸·Î ¸¶Áö¸· ¸Å°³º¯¼ö¿¡ 0À» ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù; ¸ðµç ¸â¹ö°¡ ÀÌÁø 0À¸·Î ÃʱâÈ­µË´Ï´Ù. ÀüÇüÀûÀ¸·Î ÀÌ·¸°Ô Çؼ­ ´ÙÀ½ ´Ü°è¿¡¼­ NumPut()ÀÌ ÀÚÁÖ È£ÃâµÇ´Â °ÍÀ» ¸·½À´Ï´Ù.

2) ¸ñÇ¥ ÇÔ¼ö°¡ ±¸Á¶Ã¼¿¡ ÀÖ´Â °ªµéÀ» ÃÖÃÊ·Î »ç¿ëÇÑ´Ù¸é, NumPut(123, MyStruct, 4, "UInt")À» È£ÃâÇØ ¸ðµç ¸â¹öµéÀ» 0¾Æ´Ñ °ªÀ¸·Î ÃʱâÈ­ÇÕ´Ï´Ù. 123À» ¸ñÇ¥ ¸â¹ö ¾È¿¡ ¹èÄ¡µÉ Á¤¼ö·Î ±³Ã¼ÇÕ´Ï´Ù (¶Ç´Â &Var¿¡ º¯¼öÀÇ ÁÖ¼Ò¸¦ ÀúÀåÇϵµ·Ï ÁöÁ¤ÇÕ´Ï´Ù). 4¸¦ ¸ñÇ¥ ¸â¹öÀÇ ¿ÀÇÁ¼ÂÀ¸·Î ±³Ã¼ÇÕ´Ï´Ù ( "¿ÀÇÁ¼Â" ¼³¸íÀº step #4¸¦ ÂüÁ¶ÇÕ´Ï´Ù). "UInt"¸¦ ÀûÀýÇÑ À¯ÇüÀ¸·Î ±³Ã¼Çϰųª ¸â¹ö°¡ Æ÷ÀÎÅͳª ÇÚµéÀ̶ó¸é »ý·«ÇÕ´Ï´Ù.

3) ¸ñÇ¥ ÇÔ¼ö¸¦ È£ÃâÇÕ´Ï´Ù. MyStructÀÇ ÁÖ¼Ò¸¦ UInt (¶Ç´Â AHK_L 42+¿¡¼­´Â Ptr) ÀÎÀÚ·Î °Ç³Ü´Ï´Ù. ¿¹¸¦ µé¾î, DllCall("MyDll\MyFunc", Ptr, &MyStruct). ÇÔ¼ö´Â ¸â¹öµéÀ» Á¶»çÇØ º¸°í ÇÊ¿äÇÏ¸é º¯°æÇÕ´Ï´Ù.

4) MyInteger := NumGet(MyStruct, 4, "UInt")¸¦ »ç¿ëÇÏ¸é ±¸Á¶Ã¼·ÎºÎÅÍ ¿øÇÏ´Â °ªÀ» ¾ó¸¶µçÁö ¿­¶÷ÇÒ ¼ö ÀÖ½À´Ï´Ù. 4¸¦ ±¸Á¶Ã¼¿¡ ÀÖ´Â ¸ñÇ¥ ¸â¹öÀÇ ¿ÀÇÁ¼ÂÀ¸·Î ±³Ã¼ÇÕ´Ï´Ù. ù ¸â¹ö´Â ¾ðÁ¦³ª 0¿¡ ÀÖ½À´Ï´Ù. µÎ ¹ø° ¸â¹ö´Â ¿ÀÇÁ¼Â 0ºÎÅÍ Ã¹ ¸â¹öÀÇ Å©±â¸¦ ´õÇÑ À§Ä¡¿¡ ÀÖ½À´Ï´Ù (ÀüÇüÀûÀ¸·Î 4). µÎ ¹ø°¸¦ ³Ñ¾î¼± ¸â¹öÀÇ À§Ä¡´Â ¹Ù·Î ¾Õ ¸â¹öÀÇ ¿ÀÇÁ¼ÂÀÇ À§Ä¡¿¡ ±× Å©±â¸¦ ´õÇÑ À§Ä¡¿¡ ÀÖ½À´Ï´Ù. ´ëºÎºÐÀÌ ¸â¹ö´Â -- DWORD, Int, ±×¸®°í ŰŸ 32-ºñÆ® Á¤¼ö À¯Çü -- Å©±â°¡ 4 ¹ÙÀÌÆ®ÀÔ´Ï´Ù. "UInt"¸¦ ÀûÀýÇÑ À¯ÇüÀ¸·Î ±³Ã¼Çϰųª ¸â¹ö°¡ Æ÷ÀÎÅͳª ÇÚµéÀÌ¸é »ý·«ÇϽʽÿÀ.

½ÇÁ¦ »ç¿ë¹ýÀº ±¸Á¶Ã¼ ¿¹Á¦¸¦ ÂüÁ¶ÇϽʽÿÀ.

¾Ë·ÁÁø ÇÑ°è

¹è¿­ÀÇ ÁÖ¼Ò¸¦ (¿¹, &MyVar) ÇÔ¼ö¿¡ °Ç³Ú ¶§ ±× ÇÔ¼ö°¡ º¯¼öÀÇ ³»¿ëÀÇ ±æÀ̸¦ º¯°æÇϸé, ±× ´ÙÀ½ºÎÅÍ º¯¼ö¸¦ »ç¿ëÇÏ¸é ¿Ã¹Ù¸£°Ô ÀÛµ¿ÇÏÁö ¾ÊÀ» °¡´É¼ºÀÌ ÀÖ½À´Ï´Ù. À̸¦ ÇØ°áÇÏ·Á¸é, ´ÙÀ½ Áß ÇϳªÀÇ Á¶Ä¡¸¦ ¼öÇàÇϽʽÿÀ: 1) MyVar¸¦ Ptr/address°¡ ¾Æ´Ï¶ó "Str" ÀÎÀÚ·Î °Ç³×½Ê½Ã¿À; 2) v1.0.44.03+¿¡¼­, VarSetCapacity(MyVar, -1)¸¦ È£ÃâÇϸé DllCallÀ» È£ÃâÇÑ ÈÄ¿¡ º¯¼öÀÇ ³»ºÎ¿¡ ÀúÀåµÈ ±æÀÌ°¡ °»½ÅµË´Ï´Ù. .

ÇÔ¼ö°¡ º¯¼ö¿¡ ÀúÀåÇÑ ÀÌÁø°ª 0Àº ±× ¿À¸¥ÂÊÀÇ ¸ðµç µ¥ÀÌÅ͸¦ °¨Ãß¾î ¹ö¸³´Ï´Ù; Áï, ±×·± µ¥ÀÌÅÍ´Â ´ëºÎºÐÀÇ ¸í·É¾î¿Í ÇÔ¼ö¿¡¼­ Á¢±ÙÇϰųª º¯°æÇÒ ¼ö ¾ø½À´Ï´Ù. ±×·¸Áö¸¸, ÁÖ¼Ò ¿¬»êÀÚ ±×¸®°í NumPut/NumGet, »Ó¸¸ ¾Æ´Ï¶ó DllCall ÀÚü·Î Á¶ÀÛÇÒ ¼ö ÀÖ½À´Ï´Ù.

Àڽſ¡°Ô °Ç³×¾îÁø ¹®ÀÚ¿­ÀÇ ÁÖ¼Ò¸¦ µ¹·ÁÁÖ´Â ÇÔ¼ö´Â ¿¹»ó°ú ´Ù¸£°Ô ´Ù¸¥ ¸Þ¸ð¸® ÁÖ¼Ò¿¡ µ¿ÀÏÇÑ ¹®ÀÚ¿­À» µ¹·ÁÁÙ °¡´É¼ºÀÌ ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¾î, ÇÁ·Î±×·¡¹Ö ¾ð¾î·Î CharLower(CharUpper(MyVar))¸¦ È£ÃâÇϸé MyVarÀÇ ³»¿ëÀÌ ¼Ò¹®ÀÚ·Î º¯È¯µË´Ï´Ù. ±×·¯³ª °°Àº ÀÏÀ» DllCall()·Î Çϸé, MyVar´Â ±× ´ÙÀ½ È£Ãâ µÚ¿¡ ´ë¹®ÀÚ°¡ µË´Ï´Ù. ¿Ö³ÄÇϸé CharLower´Â MyVar¿Í ³»¿ëÀÌ µ¿ÀÏÇÑ ´Ù¸¥/Àӽà ¹®ÀÚ¿­¿¡ ¿¬»êÀ» ¼öÇàÇϱ⠶§¹®ÀÔ´Ï´Ù :

MyVar = ABC
result := DllCall("CharLower", str, DllCall("CharUpper", Str, MyVar, Str), Str)

À̸¦ ¿ìȸÇÏ·Á¸é, À§¿¡¼­ µÎ °³ÀÇ ¹ØÁÙ ºÙÀº "Str" °ªÀ» Ptr·Î º¯°æÇϽʽÿÀ. ÀÌ·¸°Ô Çϸé CharUpperÀÇ ¹Ýȯ °ªÀÌ ¼ø¼öÇÑ ÁÖ¼Ò·Î ¹ø¿ªµË´Ï´Ù. CharLower¿¡ Á¤¼ö·Î °Ç³×¾îÁú °ÍÀÔ´Ï´Ù.

¹®ÀÚ¿­À» ´Ù·ê ¶§ ´Ù¸¥ ÇѰ踦 ¸¶ÁÖÇÒ ¼öµµ ÀÖ½À´Ï´Ù. ÀÚ¼¼ÇÑ °ÍÀº ½ºÅ©¸³Æ® ȣȯ¼ºÀ» ÂüÁ¶ÇϽʽÿÀ.

ÄÄÆ÷³ÍÆ® °´Ã¼ ¸ðµ¨ (COM)

COM °´Ã¼´Â VBScript¿Í ºñ½ÁÇÑ ¾ð¾î·Î Á¢±ÙÇÒ ¼ö ÀÖÀ¸¸ç ÀüÇüÀûÀ¸·Î ¿ÀÅäÇÖÅ°ÀÇ ComObjCreate, ComObjGet ¶Ç´Â ComObjActive ±×¸®°í ³»Àå °´Ã¼ ±¸¹®À» ÅëÇÏ¿© Á¢±ÙÇÒ ¼öµµ ÀÖ½À´Ï´Ù.

IDispatch¸¦ Áö¿øÇÏÁö ¾Ê´Â COM °´Ã¼´Â DllCall°ú ÇÔ²² »ç¿ëÇÏ·Á¸é ÇÔ¼öÀÇ ÁÖ¼Ò¸¦ ±× °´Ã¼ ÀÎÅÍÆäÀ̽ºÀÇ °¡»ó ÇÔ¼ö Å×ÀÌºí¿¡¼­ ¿­¶÷ÇÕ´Ï´Ù. ´õ ÀÚ¼¼ÇÑ °ÍÀº ¾Æ·¡ÀÇ ¿¹Á¦¸¦ ÂüÁ¶ÇϽʽÿÀ.

.NET ÇÁ·¹ÀÓ¿öÅ© ´ëºÎºÐµµ COM°ú DllCallÀ» ÅëÇÏ¿© Á¢±ÙÇÒ ¼ö ÀÖ½À´Ï´Ù. ´ÙÀ½http://www.autohotkey.com/forum/topic26191.htmlÀ» ÂüÁ¶ÇϽʽÿÀ.

°ü·Ã

½ºÅ©¸³Æ® ȣȯ¼º, PostMessage, OnMessage(), RegisterCallback(), Run, VarSetCapacity, Functions, SysGet, MSDN ¶óÀ̺귯¸®

¿¹Á¦

; ¿¹Á¦: Windows API ÇÔ¼ö "MessageBox"¸¦ È£ÃâÇÏ°í »ç¿ëÀÚ°¡ ´©¸¥ ¹öÆ°À» º¸°íÇÕ´Ï´Ù.

WhichButton := DllCall("MessageBox", "Int", "0", "Str", "Press Yes or No", "Str", "Title of box", "Int", 4)
MsgBox You pressed button #%WhichButton%.
; ¿¹Á¦: ¹ÙÅÁÈ­¸é È­¸éÀ» ÁöÁ¤µÈ ºñÆ®¸Ê ÆÄÀÏ·Î ¹Ù²ß´Ï´Ù (.bmp).

DllCall("SystemParametersInfo", UInt, 0x14, UInt, 0, Str, A_WinDir . "\winnt.bmp", UInt, 2)
; ¿¹Á¦: API ÇÔ¼ö "IsWindowVisible"¸¦ È£ÃâÇØ ³ëÆ®Æеå âÀÌ º¸ÀÌ´ÂÁö ¾Ë¾Æ³À´Ï´Ù.

DetectHiddenWindows On
if not DllCall("IsWindowVisible", "Ptr", WinExist("Untitled - Notepad"))  ; WinExist()´Â HWND¸¦ µ¹·ÁÁÝ´Ï´Ù.
    MsgBox The window is not visible.
; ¿¹Á¦: APIÀÇ wsprintf()¸¦ È£ÃâÇØ  432 ¼ýÀÚ ¾Õ¿¡ 0À» µ¡´ë¾î 10 ÀÚ¸® ³ÊºñÀÇ ¹®ÀÚ·Î ¸¸µì´Ï´Ù (0000000432).

VarSetCapacity(ZeroPaddedNumber, 20)  ; º¯¼ö°¡ »õ ¹®ÀÚ¿­À» ¹ÞÀ» ¸¸Å­ ÃæºÐÈ÷ Å«Áö È®ÀÎÇÕ´Ï´Ù.
DllCall("wsprintf", "Str", ZeroPaddedNumber, "Str", "%010d", "Int", 432, "Cdecl")  ; Cdecl È£Ãâ °ü·Ê¸¦ ¿ä±¸ÇÕ´Ï´Ù.
MsgBox %ZeroPaddedNumber%
; ¿¹Á¦: QueryPerformanceCounter()ÀÇ »ç¿ë¹ýÀ» º¸¿©ÁÝ´Ï´Ù. A_TickCountÀÇ 10ms º¸´Ù ´õ Á¤¹Ðµµ°¡ ³ô½À´Ï´Ù.

DllCall("QueryPerformanceCounter", "Int64*", CounterBefore)
Sleep 1000
DllCall("QueryPerformanceCounter", "Int64*", CounterAfter)
MsgBox % "Elapsed QPC time is " . CounterAfter - CounterBefore
; ¿¹Á¦: Àӽ÷Π¸¶¿ì½ºÀÇ ¼Óµµ¸¦ ÁÙ¿©ÁÖ´Â ÇÖÅ°ÀÔ´Ï´Ù. ´õ Á¤¹ÐÇÏ°Ô À§Ä¡¸¦ Àâ´Âµ¥ µµ¿òÀÌ µË´Ï´Ù.
; F1 Å°¸¦ ´©¸£¸é Ä¿¼­ÀÇ ¼Óµµ°¡ ´À·ÁÁý´Ï´Ù. ¶¼¸é ¿ø·¡ÀÇ ¼Óµµ·Î µ¹¾Æ¿É´Ï´Ù.

F1::
SPI_GETMOUSESPEED = 0x70
SPI_SETMOUSESPEED = 0x71
; ³ªÁß¿¡ º¹±¸ÇÒ ¼ö ÀÖµµ·Ï ÇöÀç ¼Óµµ¸¦ ¿­¶÷ÇÕ´Ï´Ù:
DllCall("SystemParametersInfo", UInt, SPI_GETMOUSESPEED, UInt, 0, UIntP, OrigMouseSpeed, UInt, 0)
; ÀÌÁ¦ ¸¶¿ì½º¸¦ ´õ ´À¸° ¼Óµµ·Î ÁöÁ¤ÇÕ´Ï´Ù. °¡Àå ¸¶Áö¸· ¸Å°³º¯¼ö ¹Ù·Î ¾Õ¿¡ ÁöÁ¤µÇ¾î ÀÖ½À´Ï´Ù (¹üÀ§´Â  1-20ÀÌ°í, 10ÀÌ ±âº»°ªÀÔ´Ï´Ù):
DllCall("SystemParametersInfo", UInt, SPI_SETMOUSESPEED, UInt, 0, Ptr, 3, UInt, 0)
KeyWait F1  ; Å°º¸µå ÀÚµ¿ ¹Ýº¹ ¶§¹®¿¡ DllCallÀÌ ¹Ýº¹ÀûÀ¸·Î È£ÃâµÇ´Â °ÍÀ» ¹æÁöÇÕ´Ï´Ù.
return

F1 up::DllCall("SystemParametersInfo", UInt, 0x71, UInt, 0, Ptr, OrigMouseSpeed, UInt, 0)  ; ¿ø·¡ ¼Óµµ¸¦ º¹±¸ÇÕ´Ï´Ù
; ¿¹Á¦: âÀÇ À¯ÀÏÇÑ ID ±×¸®°í ±×ÀÇ ÄÜÆ®·Ñ Áß ClassNNÀ̳ª ÅؽºÆ®¸¦ °Ç³Ú ¶§,
; ´ÙÀ½ ÇÔ¼ö´Â ±× ÄÜÆ®·ÑÀÇ HWND (À¯ÀÏÇÑ ID)¸¦ µ¹·ÁÁÝ´Ï´Ù.
; v1.0.43.06+: ÀÌ ÇÔ¼ö´Â ´ÙÀ½ ¸í·É¾î·Î ±³Ã¼µÇ¾ú½À´Ï´Ù. ÀÌ°ÍÀÌ ´õ Á¤È®ÇÕ´Ï´Ù.

ControlGet, OutputVar, Hwnd,, ClassNN, WinTitle
; ¿¹Á¦: È°¼º âÀ» °üÁ¦ÇÏ°í ÃÊÁ¡ÀÌ ÀÖ´Â ÄÜÆ®·Ñ ¾È¿¡¼­ ±×ÀÇ ¼öÁ÷ ½ºÅ©·Ñ¹ÙÀÇ À§Ä¡¸¦ (½Ç½Ã°£À¸·Î °»½ÅÇÏ¿©) º¸¿©ÁÝ´Ï´Ù.
; ÀÌ°ÍÀº v1.0.43.06+À» ¿ä±¸ÇÕ´Ï´Ù. ¿Ö³ÄÇϸé ControlGet Hwnd¸¦ »ç¿ëÇϱ⠶§¹®ÀÔ´Ï´Ù.

#Persistent
SetTimer, WatchScrollBar, 100
return

WatchScrollBar:
ActiveWindow := WinExist("A")
if not ActiveWindow  ; È°¼º â ¾øÀ½.
    return
ControlGetFocus, FocusedControl, ahk_id %ActiveWindow%
if not FocusedControl  ; ÃÊÁ¡ â ¾øÀ½.
    return
; ÅøÆÁ¿¡ ¼öÆò ¶Ç´Â ¼öÁ÷ ½ºÅ©·Ñ¹ÙÀÇ À§Ä¡¸¦ º¸¿©ÁÝ´Ï´Ù:
ControlGet, ChildHWND, Hwnd,, %FocusedControl%, ahk_id %ActiveWindow%
ToolTip % DllCall("GetScrollPos", "Ptr", ChildHWND, "Int", 1)  ;  ¸¶Áö¸· ¸Å°³º¯¼ö´Â SB_VERT¿¡ ´ëÇØ 1ÀÌ°í, SB_HORZ¿¡ ´ëÇØ 0ÀÔ´Ï´Ù.
return
; ¿¹Á¦: ÀÛµ¿ÇÏ´Â ½ºÅ©¸³Æ®ÀÔ´Ï´Ù. ÅؽºÆ®¸¦ ÆÄÀÏ¿¡ ¾´ ´ÙÀ½ ´Ù½Ã ¸Þ¸ð¸®·Î ÀÐ¾î µéÀÔ´Ï´Ù (v1.0.34+ ¿ä±¸).
; ÀÌ ¸Þ½îµå¸¦ »ç¿ëÇÏ¸é ¿©·¯ ÆÄÀÏÀ» µ¿½Ã¿¡ Àаųª ¾µ °æ¿ì ¼öÇ༺´ÉÀÌ Çâ»ó µË´Ï´Ù.
; AHK_L 42+¿¡¼­´Â FileOpenÀ» »ç¿ëÇϸé, °°Àº ÀÏÀ» ÇÒ ¼ö ÀÖ½À´Ï´Ù.

FileSelectFile, FileName, S16,, »õ ÆÄÀÏÀ» ¸¸µì´Ï´Ù:
if FileName =
    return
GENERIC_WRITE = 0x40000000  ; ÀбⰡ ¾Æ´Ï¶ó ¾²±â ¿ëµµ·Î ÆÄÀÏÀ» ¿±´Ï´Ù.
CREATE_ALWAYS = 2  ; »õ ÆÄÀÏÀ» ¸¸µì´Ï´Ù (±âÁ¸ÀÇ ÆÄÀÏÀ» µ¤¾î ¾¹´Ï´Ù).
hFile := DllCall("CreateFile", Str, FileName, UInt, GENERIC_WRITE, UInt, 0, Ptr, 0, UInt, CREATE_ALWAYS, UInt, 0, Ptr, 0, Ptr)
if not hFile
{
    MsgBox ¾²±â ¿ëÀ¸·Î "%FileName%"À» ¿­ ¼ö ¾ø½À´Ï´Ù.
    return
}
TestString = ÀÌ°ÍÀº Å×½ºÆ® ÁÙÀÔ´Ï´Ù.`r`n  ; ÆÄÀÏÀ» ÀÌ·± ½ÄÀ¸·Î ¾µ ¶§,  `n ¸»°í `r`nÀ» »ç¿ëÇÏ¿© »õ ÁÙÀ» ½ÃÀÛÇϽʽÿÀ.
DllCall("WriteFile", Ptr, hFile, Str, TestString, UInt, StrLen(TestString), UIntP, BytesActuallyWritten, Ptr, 0)
DllCall("CloseHandle", Ptr, hFile)  ; ÆÄÀÏÀ» ´Ý½À´Ï´Ù.

; ÆÄÀÏ¿¡ ½èÀ¸¹Ç·Î ÀÌÁ¦ ´Ù½Ã ±× ³»¿ëÀ» ¸Þ¸ð¸®·Î ÀÐ¾î µéÀÔ´Ï´Ù.
GENERIC_READ = 0x80000000  ; ¾²±â ¸»°í Àб⠿뵵·Î ÆÄÀÏÀ» ¿±´Ï´Ù.
OPEN_EXISTING = 3  ; ÀÌ ¸ðµå´Â ¿­¸± ÆÄÀÏÀÌ ÀÌ¹Ì Á¸ÀçÇØ¾ß ÇÔÀ» °¡¸®Åµ´Ï´Ù.
FILE_SHARE_READ = 0x1 ; ÀÌ ÁÙ°ú ´ÙÀ½ ÁÙÀº ÆÄÀÏÀ» ¿­¾î ³õ°í ÀÖ´Â µ¿¾È ´Ù¸¥ ÇÁ·Î¼¼½º°¡ ÆÄÀÏÀ» ¿­ ¼ö ÀÖ´ÂÁö¸¦ ÁöÁ¤ÇÕ´Ï´Ù.
FILE_SHARE_WRITE = 0x2
hFile := DllCall("CreateFile", Str, FileName, UInt, GENERIC_READ, UInt, FILE_SHARE_READ|FILE_SHARE_WRITE, Ptr, 0, UInt, OPEN_EXISTING, UInt, 0, Ptr, 0)
if not hFile
{
    MsgBox Àб⠿ëÀ¸·Î "%FileName%"À» ¿­ ¼ö ¾ø½À´Ï´Ù.
    return
}
; Å×½ºÆ® ¸ñÀûÀ¸·Î º¯¼ö¸¦ ºñ¿ìÁö¸¸, °¡¿ë ´É·ÂÀÌ ÃæºÐÇÑÁö È®ÀÎÇϽʽÿÀ:
BytesToRead := VarSetCapacity(TestString, StrLen(TestString))
DllCall("ReadFile", Ptr, hFile, Str, TestString, UInt, BytesToRead, UIntP, BytesActuallyRead, Ptr, 0)
DllCall("CloseHandle", Ptr, hFile)  ; ÆÄÀÏÀ» ´Ý½À´Ï´Ù.
MsgBox ´ÙÀ½ ¹®ÀÚ¿­À» ÆÄÀϷκÎÅÍ Àоú½À´Ï´Ù: %TestString%
; ¿¹Á¦: Win+C¸¦ ´©¸¦ ¶§ ¸¶¿ì½º Ä¿¼­¸¦ °¨Ãä´Ï´Ù. ³ªÁß¿¡ Ä¿¼­¸¦ º¸¿©ÁÖ·Á¸é, ´Ù½Ã Win+C¸¦ ´©¸¨´Ï´Ù.
; ½ºÅ©¸³Æ®´Â www.autohotkey.com/forum/topic6107.html¿¡¼­ ¾òÀ» ¼ö ÀÖ½À´Ï´Ù.

OnExit, ShowCursor  ; ½ºÅ©¸³Æ®°¡ Á¾·áÇÒ ¶§ Ä¿¼­°¡ º¸ÀÌ´ÂÁö È®ÀÎÇÕ´Ï´Ù.
return

ShowCursor:
SystemCursor("On")
ExitApp

#c::SystemCursor("Toggle")  ; Win+C ÇÖÅ°·Î Ä¿¼­¸¦ ÄÑ°í ²ü´Ï´Ù.

SystemCursor(OnOff=1)   ; INIT = "I","Init"; OFF = 0,"Off"; TOGGLE = -1,"T","Toggle"; ON = others
{
    static AndMask, XorMask, $, h_cursor
        ,c0,c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13 ; ½Ã½ºÅÛ Ä¿¼­
        , b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13   ; ºó Ä¿¼­
        , h1,h2,h3,h4,h5,h6,h7,h8,h9,h10,h11,h12,h13   ; ±âº» Ä¿¼­ÀÇ ÇÚµé
    if (OnOff = "Init" or OnOff = "I" or $ = "")       ; ¿äûµÉ ¶§ ¶Ç´Â ù ¹ø°·Î È£ÃâµÉ ¶§ ÃʱâÈ­ÇÕ´Ï´Ù
    {
        $ = h                                          ; ±âº» Ä¿¼­¸¦ È°¼ºÈ­ÇÕ´Ï´Ù
        VarSetCapacity( h_cursor,4444, 1 )
        VarSetCapacity( AndMask, 32*4, 0xFF )
        VarSetCapacity( XorMask, 32*4, 0 )
        system_cursors = 32512,32513,32514,32515,32516,32642,32643,32644,32645,32646,32648,32649,32650
        StringSplit c, system_cursors, `,
        Loop %c0%
        {
            h_cursor   := DllCall( "LoadCursor", "Ptr",0, "Ptr",c%A_Index% )
            h%A_Index% := DllCall( "CopyImage", "Ptr",h_cursor, "UInt",2, "Int",0, "Int",0, "UInt",0 )
            b%A_Index% := DllCall( "CreateCursor", "Ptr",0, "Int",0, "Int",0
                , "Int",32, "Int",32, "Ptr",&AndMask, "Ptr",&XorMask )
        }
    }
    if (OnOff = 0 or OnOff = "Off" or $ = "h" and (OnOff < 0 or OnOff = "Toggle" or OnOff = "T"))
        $ = b  ; ºó Ä¿¼­¸¦ »ç¿ëÇÕ´Ï´Ù
    else
        $ = h  ; ÀúÀåµÈ Ä¿¼­¸¦ »ç¿ëÇÕ´Ï´Ù

    Loop %c0%
    {
        h_cursor := DllCall( "CopyImage", "Ptr",%$%%A_Index%, "UInt",2, "Int",0, "Int",0, "UInt",0 )
        DllCall( "SetSystemCursor", "Ptr",h_cursor, "UInt",c%A_Index% )
    }
}
; ±¸Á¶Ã¼ ¿¹Á¦: RECT ±¸Á¶Ã¼ÀÇ ÁÖ¼Ò¸¦ GetWindowRect()¿¡ °Ç³Ü´Ï´Ù. 
; ±¸Á¶Ã¼ÀÇ ¸â¹ö°¡ âÀÇ ÁÂ, »ó, ¿ì, ÇÏÀÇ À§Ä¡¿¡ ¼³Á¤µË´Ï´Ù (È­¸é¿¡ »ó´ëÀûÀÓ).

Run Notepad
WinWait Untitled - Notepad  ; ¿©±â¿¡¼­ ¾Æ·¡¿¡ WinExist()¿¡ »ç¿ëµÉ "¸¶Áö¸· ¹ß°ß â"ÀÌ ¼³Á¤µË´Ï´Ù.
VarSetCapacity(Rect, 16)  ; RECT´Â ³× °³ÀÇ 32-ºñÆ® Á¤¼ö·Î ±¸¼ºµÈ ±¸Á¶Ã¼ÀÔ´Ï´Ù (Áï, 4*4=16).
DllCall("GetWindowRect", Ptr, WinExist(), Ptr, &Rect)  ; WinExist()´Â HWND¸¦ µ¹·ÁÁÝ´Ï´Ù.
MsgBox % "Left " . NumGet(Rect, 0, "Int") . " Top " . NumGet(Rect, 4, "Int")
    . " Right " . NumGet(Rect, 8, "Int") . " Bottom " . NumGet(Rect, 12, "Int")
; ±¸Á¶Ã¼ ¿¹Á¦: FillRect()¿¡ RECT ±¸Á¶Ã¼ÀÇ ÁÖ¼Ò¸¦ °Ç³Ü´Ï´Ù. 
; ÀÌ ±¸Á¶Ã¼´Â Àӽ÷Π»¡°²°Ô Ä¥ÇÒ È­¸éÀÇ ±¸¿ªÀ» °¡¸®Åµ´Ï´Ù.

VarSetCapacity(Rect, 16, 0)  ; 4-¹ÙÀÌÆ® Á¤¼ö¸¦ ¼ö¿ëÇϵµ·Ï °¡¿ë´É·ÂÀ» ¼³Á¤ÇÏ°í ±× ¸ðµÎ¸¦ 0À¸·Î ÃʱâÈ­ÇÕ´Ï´Ù.
NumPut(A_ScreenWidth//2, Rect, 8, "Int")  ; ±¸Á¶Ã¼¿¡¼­ ¼¼ ¹ø° Á¤¼ö´Â "rect.right"ÀÔ´Ï´Ù.
NumPut(A_ScreenHeight//2, Rect, 12, "Int") ; ±¸Á¶Ã¼¿¡¼­ ³× ¹ø° Á¤¼ö´Â "rect.bottom"ÀÔ´Ï´Ù.
hDC := DllCall("GetDC", "Ptr", 0, "Ptr")  ; 0À» °Ç³× µ¥½ºÅ©Å¾ÀÇ ÀåÄ¡ ¹®¸ÆÀ» ¾ò½À´Ï´Ù.
hBrush := DllCall("CreateSolidBrush", "UInt", 0x0000FF, "Ptr")  ; »¡°£»ö ºê·¯½¬¸¦ ¸¸µì´Ï´Ù (BGR Çü½ÄÀ¸·Î 0x0000FF ÀÓ).
DllCall("FillRect", "Ptr", hDC, "Ptr", &Rect, "Ptr", hBrush)  ; ÁöÁ¤µÈ »ç°¢±¸¿ªÀ» À§ÀÇ ºê·¯½¬¸¦ »ç¿ëÇÏ¿© ä¿ó´Ï´Ù.
DllCall("ReleaseDC", "Ptr", 0, "Ptr", hDC)  ; û¼Ò.
DllCall("DeleteObject", "Ptr", hBrush)  ; û¼Ò.
; ±¸Á¶Ã¼ ¿¹Á¦: ½Ã½ºÅÛ ½Ã°è¸¦ ÁöÁ¤µÈ ³¯Â¥¿Í ½Ã°£À¸·Î º¯°æÇÕ´Ï´Ù.
; ¾ÕÀ¸·Î ³¯Â¥¸¦ º¯°æÇÒ ¶§ ÁÖÀÇÇϽʽÿÀ. ÀÏÁ¤ÀÌ ÀâÇô ÀÖ´Â ÀÛ¾÷ÀÌ ³Ê¹« À̸£°Ô ½ÇÇàµÉ °¡´É¼ºÀÌ ÀÖ½À´Ï´Ù!

SetSystemTime("20051008142211")  ; ½Ã°£µµÀåÀ» °Ç³Ü´Ï´Ù (Áö¿ª½Ã°£ÀÔ´Ï´Ù. UTC¾Æ´Ô).

SetSystemTime(YYYYMMDDHHMISS)
; ½Ã½ºÅÛ ½Ã°è¸¦ ÁöÁ¤µÈ ³¯Â¥¿Í ½Ã°£À¸·Î ¼³Á¤ÇÕ´Ï´Ù.
; È£ÃâÀÚ´Â µé¾î¿À´Â ¸Å°³º¯¼ö°¡ À¯È¿ÇÑ ³¯Â¥-½Ã°£ µµÀåÀÎÁö È®ÀÎÇØ¾ß ÇÕ´Ï´Ù
; (Áö¿ª½Ã°£ÀÌÁö, UTC ½Ã°£ÀÌ ¾Æ´Õ´Ï´Ù). ¼º°øÇϸé 0-¾Æ´Ñ °ªÀ» µ¹·ÁÁÖ°í ±×·¸Áö ¾ÊÀ¸¸é 0À» µ¹·ÁÁÝ´Ï´Ù.
{
    ; SetSystemTime()¿¡ »ç¿ëÇϱâ À§ÇØ ¸Å°³º¯¼ö¸¦ Áö¿ª ½Ã°£¿¡¼­  UTC ½Ã°£À¸·Î º¯°æÇÕ´Ï´Ù.
    UTC_Delta -= A_NowUTC, Seconds  ; ¹Ý¿Ã¸² ¹®Á¦ ¶§¹®¿¡ ÃÊ°¡ ´õ Á¤È®ÇÕ´Ï´Ù.
    UTC_Delta := Round(-UTC_Delta/60)  ; °¡Àå °¡±î¿î ºÐÀ¸·Î ¹Ý¿Ã¸²ÇØ Á¤È®µµ¸¦ È®ÀÎÇÕ´Ï´Ù.
    YYYYMMDDHHMISS += UTC_Delta, Minutes  ; UTC·Î º¯È¯Çϱâ À§ÇØ ¿ÀÇÁ¼ÂÀ» Àû¿ëÇÕ´Ï´Ù.

    VarSetCapacity(SystemTime, 16, 0)  ; ÀÌ ±¸Á¶´Â 8°³ÀÇ UShort·Î ±¸¼ºµË´Ï´Ù(Áï, 8*2=16).

    StringLeft, Int, YYYYMMDDHHMISS, 4    ; YYYY (ÇØ)
    NumPut(Int, SystemTime, 0, "UShort")
    StringMid, Int, YYYYMMDDHHMISS, 5, 2  ; MM (´Þ, 1-12)
    NumPut(Int, SystemTime, 2, "UShort")
    StringMid, Int, YYYYMMDDHHMISS, 7, 2  ; DD (³¯)
    NumPut(Int, SystemTime, 6, "UShort")
    StringMid, Int, YYYYMMDDHHMISS, 9, 2  ; HH (24-½Ã°£Á¦ ½Ã°£)
    NumPut(Int, SystemTime, 8, "UShort")
    StringMid, Int, YYYYMMDDHHMISS, 11, 2 ; MI (ºÐ)
    NumPut(Int, SystemTime, 10, "UShort")
    StringMid, Int, YYYYMMDDHHMISS, 13, 2 ; SS (ÃÊ)
    NumPut(Int, SystemTime, 12, "UShort")

    return DllCall("SetSystemTime", Ptr, &SystemTime)
}
/* °í±Þ ±¸Á¶Ã¼ ¿¹Á¦:

1) DllCall()À» »ç¿ëÇÏ¿© TCP/IP ¼­¹ö¿¡ ³×Æ®¿öÅ© Á¢¼ÓÀ» ¸¸µé°í ±×·ÎºÎÅÍ µ¥ÀÌÅ͸¦ ¹Þ´Â ¹æ¹ýÀº WinLIRC Ŭ¶óÀ̾ðÆ® ½ºÅ©¸³Æ®¸¦ ÂüÁ¶ÇϽʽÿÀ. 

2) ¿î¿µ üÁ¦´Â »ç¿ëÀÚ°¡ ±Û²ÃÀ̳ª Ä÷¯ ¶Ç´Â ¾ÆÀÌÄÜÀ» °í¸¦ ¼ö ÀÖµµ·Ï Ç¥ÁØ ´ëÈ­»óÀÚ¸¦ Á¦°øÇÕ´Ï´Ù.
ÀÌ·± ´ëÈ­»óÀÚ´Â ±¸Á¶Ã¼¸¦ »ç¿ëÇÏ°í www.autohotkey.com/forum/topic17230.html¿¡¼­ ¿¹¸¦ º¸½Ç ¼ö ÀÖ½À´Ï´Ù.

*/
/*
  ¿¹Á¦: COMÀ» »ç¿ëÇÏ¿© Àӽ÷ΠȰ¼º âÀ» ŽºÅ©¹Ù¿¡¼­ Á¦°ÅÇÕ´Ï´Ù.

  ITaskbarListÀÇ VTable¿¡ ÀÖ´Â ¸Þ½îµå:
    IUnknown:
      0 QueryInterface  -- ´ë½Å ComObjQuery¸¦ »ç¿ëÇϽʽÿÀ
      1 AddRef          -- ´ë½Å ObjAddRef ¸¦ »ç¿ëÇϽʽÿÀ
      2 Release         -- ´ë½Åuse ObjRelease ¸¦ »ç¿ëÇϽʽÿÀ
    ITaskbarList:
      3 HrInit
      4 AddTab
      5 DeleteTab
      6 ActivateTab
      7 SetActiveAlt
*/
IID_ITaskbarList  := "{56FDF342-FD6D-11d0-958A-006097C9A090}"
CLSID_TaskbarList := "{56FDF344-FD6D-11d0-958A-006097C9A090}"

; TaskbarList °´Ã¼¸¦ ¸¸µé°í ±×ÀÇ ÁÖ¼Ò¸¦ tbl¿¡ ÀúÀåÇÕ´Ï´Ù.
tbl := ComObjCreate(CLSID_TaskbarList, IID_ITaskbarList)

activeHwnd := WinExist("A")

DllCall(vtable(tbl,3), "ptr", tbl)                     ; tbl.HrInit()
DllCall(vtable(tbl,5), "ptr", tbl, "ptr", activeHwnd)  ; tbl.DeleteTab(activeHwnd)
Sleep 3000
DllCall(vtable(tbl,4), "ptr", tbl, "ptr", activeHwnd)  ; tbl.AddTab(activeHwnd)

; ºÐ¹è°¡ ¾ø´Â °´Ã¼´Â ¾ðÁ¦³ª ¼öÀÛ¾÷À¸·Î ÇØÁ¦ÇØ¾ß ÇÕ´Ï´Ù.
ObjRelease(tbl)

vtable(ptr, n) {
    ; NumGet(ptr+0)Àº °´Ã¼ÀÇ °¡»ó ÇÔ¼ö µ¥À̺íÀ» (°£´ÜÈ÷ ¸»ÇØ vtableÀ») µ¹·ÁÁÝ´Ï´Ù
    ; Ç¥Çö½Ä¿¡¼­ ³ª¸ÓÁö´Â vtable·ÎºÎÅÍ n ¹ø° ÇÔ¼öÀÇ ÁÖ¼ÒÀÇ ÁÖ¼Ò¸¦ ¿­¶÷ÇÕ´Ï´Ù.
    
    return NumGet(NumGet(ptr+0), n*A_PtrSize)
}