오토핫키는 DllCall 명령어를 통해 dll파일 API을 사용할 수 있습니다.
막강한 Windows API는 물론이고요.
DllCall을 이용해 API를 사용하기전에 알아두어야 할 것이 있습니다.
1. Dll 파일의 이름과 경로 그리고 함수명
2. 함수에 필요한 자료형
3. 함수 반환값의 형태
추가로, DLL파일의 API는 C++ 문법으로 작성되어있으므로 오토핫키 문법으로 변환하는 작업이 필요합니다.
아래 '타입'에서 설명합니다.
DllCall의 신택스는 아래와 같습니다.
결과값 := DllCall("dll파일명\함수명", 타입1, 줄값1, 타입2, 줄값2, "Cdecl 반환자료형")
ㅡ Arg 줄값이 변수라면 " " 따옴표없이 작성합니다.
ㅡ 현재 변수보다 긴 값을 저장한다면, 'VarSetCapacity' 명령어를 이용해야합니다.
ㅡ 반환자료형이 INT, BOOL, 또는 없으면 생략이 가능합니다.
ㅡ dll파일명은 dll파일의 전체경로를 적어주셔야합니다. 하지만 아래의 Dll의 경우 생략이 가능합니다.
- - Kernel32.dll
- - User32.dll
- - Comctl32.dll
- - GDI32.dll
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에 대해서는, 항상 로드 된 채로 있기 때문에, 이 처리는 필요없다
DllCall("FreeLibrary", UInt, hModule) ;DLL 파일을 닫는다, 메모리반환.
참조
http://ahkplant.tistory.com/101
'프로그래밍 > AHK 메뉴얼' 카테고리의 다른 글
[메뉴얼] 오토핫키 자동화 프로그램 제작 (240) | 2015.02.05 |
---|---|
[메뉴얼] 오토핫키 소스코드 생성과 컴파일방법 (16) | 2015.02.05 |
[메뉴얼] 1. 오토핫키 스크립트 생성 (10) | 2015.01.11 |
오토핫키 설치하기 (18) | 2015.01.11 |
오토핫키 소개 (9) | 2015.01.11 |