오토핫키는 DllCall 명령어를 통해 dll파일 API을 사용할 수 있습니다.

막강한 Windows API는 물론이고요.

 

DllCall을 이용해 API를 사용하기전에 알아두어야 할 것이 있습니다.

1. Dll 파일의 이름과 경로 그리고 함수명

2. 함수에 필요한 자료형

3. 함수 반환값의 형태

 

추가로, DLL파일의 API는 C++ 문법으로 작성되어있으므로 오토핫키 문법으로 변환하는 작업이 필요합니다.

아래 '타입'에서 설명합니다.

 

DllCall의 신택스는 아래와 같습니다.

 

Result := DllCall("[DllFile\]Function" [, Type1, Arg1, Type2, Arg2, "Cdecl ReturnType"])
결과값 := DllCall("dll파일명\함수명", 타입1, 줄값1, 타입2, 줄값2, "Cdecl 반환자료형")

 

ㅡ Arg 줄값이 변수라면 " " 따옴표없이 작성합니다.

ㅡ 현재 변수보다 긴 값을 저장한다면, 'VarSetCapacity' 명령어를 이용해야합니다.

ㅡ 반환자료형이 INT, BOOL, 또는 없으면 생략이 가능합니다.

ㅡ dll파일명은 dll파일의 전체경로를 적어주셔야합니다. 하지만 아래의 Dll의 경우 생략이 가능합니다.

  • - Kernel32.dll
  • - User32.dll
  • - Comctl32.dll
  • - GDI32.dll

 

마이크로소프트 Window API 함수 리스트

 

Type 타입

 

C++ 문법 

오토핫키 문법 

CHAR

Str 

LPCTSTR 

Str 

LPTSTR 

Str* 

LPSTR 

Str 

TCHAR* 

Str* 

INT 

Int 

LONGINT 

Int 

BOOL 

Int 

HWND 

Int 

PTR 

Int 

LLPOINT 

Int 

HBRUSH 

Int 

HBITMAP 

Int 

LPDWORD 

Int* 

LPVOID 

Int* 

INT64 

Int64 

Uint 

Uint 

DWORD 

Uint 

LPDWORD 

Uint* 

RECT* 

int / int64 

WORD

uShort 

BYTE 

Char / UChar 

Float 

Float

DOUBLE 

Double 

 

예제로 확인하기

WIndow API를 이용해 메시지박스를 띄워보겠습니다.

마이크로소프트 WIndow API 함수리스트에서 확인해보니 구조는 아래와 같네요.

 

int WINAPI MessageBox(
  _In_opt_  HWND hWnd,
  _In_opt_  LPCTSTR lpText,
  _In_opt_  LPCTSTR lpCaption,
  _In_      UINT uType
);

 

오토핫키 문법으로 변환하면 이렇게 됩니다.

 

DllCall("MessageBox", int, 0, str, "메시지박스입니다!", str, "메시지박스", Uint, "0x00000000L")

 

퍼포먼스 문제

DllCall 함수 실행마다DLL(을)를 로드하고, 종료후 개방한다.
같은 함수를 단시간에 빈번히 호출하는 경우, 아래와 같이 해DLL(을)를 로드하는 처리를 자기 부담으로 기술해 두는 것으로, 퍼포먼스를 개선할 수 있다.
덧붙여User32.dll,Kernel32.dll,ComCtl32.dll,Gdi32.dll의 각DLL에 대해서는, 항상 로드 된 채로 있기 때문에, 이 처리는 필요없다

 

hModule := DllCall("LoadLibrary", str, "MyFunctions.dll")  ;Dll 파일 로드
DllCall("FreeLibrary", UInt, hModule)  ;DLL 파일을 닫는다, 메모리반환.

 

참조

http://ahkplant.tistory.com/101

http://jogamja.tistory.com/50

http://ahkscript.org/docs/commands/DllCall.htm

http://autohotkey.sabryfattah.com/category/dll-call/

  1. EmP 2015.03.15 11:26 신고

    강좌 잘 보고 있읍니다. 감사합니다.

  2. 퉁군 2015.04.24 22:22 신고

    다른 싸이트 통해서 여기와서 공부중인데 정리를 정말 잘해놓으셔서
    저처럼 처음이구 어리한사람도 이해가 잘 되네요..ㅎㅎ
    자두들러 공부하고 혹여나 막히는 부분 있으면 질문좀 살짝 해도되죠?? ㅎㅎ
    항상 감사합니다~^^

  3. 뭔소리야 2015.07.26 17:33 신고

    댓글보면 다들 이해가 잘되는거같은데 내가초보인건지 이건 뭔소린지 도통모르겄다..

  4. yuniss 2015.07.31 22:53 신고

    강좌 잘보고 있습니다... 잘 정리 되어 있네요

  5. ㄴㄹㄴㅇ 2015.08.28 06:00 신고

    한달안에 정복하고프다

+ Recent posts