Ç¥ÁØ Windows API ÇÔ¼ö °°ÀÌ, DLL¾ÈÀÇ ÇÔ¼ö¸¦ È£ÃâÇÕ´Ï´Ù.
Result := DllCall("[DllFile\]Function" [, Type1, Arg1, Type2, Arg2, "Cdecl ReturnType"])
DllCallÀº ÇÔ¼ö°¡ µ¹·ÁÁÖ´Â ½ÇÁ¦ °ªÀ» µ¹·ÁÁÝ´Ï´Ù. ÇÔ¼ö°¡ °ªÀ» µ¹·ÁÁÖÁö ¾Ê´Â À¯ÇüÀ̶ó¸é, ±× °á°ú´Â Á¤ÀǵÇÁö ¾ÊÀº Á¤¼öÀÔ´Ï´Ù. ¿¡·¯ ¶§¹®¿¡ ÇÔ¼ö¸¦ È£ÃâÇÒ ¼ö ¾ø´Ù¸é, ±× °á°ú °ªÀº ºñ¾î ÀÖ½À´Ï´Ù(ºó ¹®ÀÚ¿).
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()ÀÌ Æ÷ÇԵ˴ϴÙ.
°¢ ½Ö¸¶´Ù ÇÔ¼ö¿¡ °Ç³×Áú ÇϳªÀÇ ¸Å°³º¯¼ö¸¦ ³ªÅ¸³À´Ï´Ù. ½ÖÀÇ °³¼ö´Â Á¦ÇÑÀÌ ¾ø½À´Ï´Ù. Type¿¡ °üÇÑ °ÍÀº ¾Æ·¡ÀÇ À¯Çü Å×À̺íÀ» ÂüÁ¶ÇϽʽÿÀ. Arg¿¡ ´ëÇÏ¿©, ÇÔ¼ö¿¡ °Ç³Ú °ªÀ» ÁöÁ¤ÇÕ´Ï´Ù.
´Ü¾î 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ÀÇ ³»¿ëÀ» ´ë¹®ÀÚ·Î º¯°æÇÕ´Ï´Ù: ±×·¸Áö¸¸, ÇÔ¼ö°¡ ÇÑ º¯¼öÀÇ ÇöÀç ³»¿ëº¸´Ù ´õ Å« ¹®ÀÚ¿À» ÀúÀåÇϵµ·Ï ¼³°èµÇ¾ú´Ù¸é, º¯¼ö°¡ ÃæºÐÈ÷ ´õ Å«Áö ¸ÕÀú Á¡°ËÇÑ ´ÙÀ½ ±× ÇÔ¼ö¸¦ È£ÃâÇϽʽÿÀ. 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 ÇÔ¼öÀÇ º¯°æÀ» ¹Ý¿µÇÕ´Ï´Ù: ÀϹÝÀûÀ¸·Î, º°Ç¥´Â ÇÔ¼ö¿¡ ÀÎÀÚ À¯ÇüÀ̳ª ¹Ýȯ À¯ÇüÀÌ "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
.
[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À» ¼³Á¤ÇÏÁö ¾Ê½À´Ï´Ù.
³»Àå ¿¹¿Ü 󸮿¡µµ ºÒ±¸ÇÏ°í, ¿©ÀüÈ÷ ½ºÅ©¸³Æ®°¡ 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 °´Ã¼´Â 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) }