예지력

오토핫키는 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/

저작자 표시 비영리 동일 조건 변경 허락
신고
댓글 로드 중…

블로그 정보

예지력 - 예지력

프로그래밍, 영화 블로그

최근에 게시된 글

티스토리 툴바