예지력
W
예지력

블로그 메뉴

  • 문의 & 피드백
  • GitHub
  • 분류 전체보기
    • 주식
    • 파생상품
    • crypto
      • 차트에 현대미술
      • 복기
      • 시스템 트레이딩
      • 기술적 분석
      • 블록체인
      • 생각
      • 리서치
      • Token Engineering
    • 이더리움 | ETH
      • 리서치
    • 테라 | LUNA
      • Tefi
      • 루나 LUNA
      • 아스트로포트 Astro
      • 앵커 프로토콜 ANC
      • 미러 프로토콜 MIR
      • 아폴로 다오 APOLLO
      • 프리즘 프로토콜 PRISM
      • 넥서스 프로토콜 NEXUS
      • 레바나 프로토콜 LEV
      • 마스 프로토콜 MARS
      • 더비 스타즈 Derby Stars
    • 프로그래밍
      • AHK 메뉴얼
      • AHK 레퍼런스
      • Delphi XE7
      • C
      • Python
      • Reversing
      • Archive
    • 일상
    • 영화
    • 낙서장
    • Deprecated
      • 로다 플레이어
      • 어의

인기 글

최근 댓글

전체 방문자
오늘
어제

티스토리

hELLO · Designed By 정상우.
예지력

W

DllCall 정리
프로그래밍/AHK 메뉴얼

DllCall 정리

2015. 2. 4. 01:29

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

728x90
저작자표시 비영리 동일조건 (새창열림)

'프로그래밍 > AHK 메뉴얼' 카테고리의 다른 글

[메뉴얼] 오토핫키 자동화 프로그램 제작  (240) 2015.02.05
[메뉴얼] 오토핫키 소스코드 생성과 컴파일방법  (16) 2015.02.05
[메뉴얼] 1. 오토핫키 스크립트 생성  (10) 2015.01.11
오토핫키 설치하기  (18) 2015.01.11
오토핫키 소개  (9) 2015.01.11
    '프로그래밍/AHK 메뉴얼' 카테고리의 다른 글
    • [메뉴얼] 오토핫키 자동화 프로그램 제작
    • [메뉴얼] 오토핫키 소스코드 생성과 컴파일방법
    • [메뉴얼] 1. 오토핫키 스크립트 생성
    • 오토핫키 설치하기
    예지력
    예지력

    티스토리툴바