'디컴방지 컴파일러'가 설치된 경우는 아래 파일을 다운로드해 사용할 필요가 없습니다.


AutoHotkey.zip

업데이트 : 2019-05-16

Autohotkey.zip 파일만 단독으로 받아 사용시 목표 스크립트를 AutoHotkey.exe 에 매번 드래그앤드롭해 실행하는 것이 번거롭다면 AutoHotkey.exe 이름을 목표 ahk 스크립트 파일 이름과 동일하게 바꾸고 목표 스크립트가 위치한 폴더에 넣고 실행하면 드래그앤드롭 없이 바로 실행 가능합니다.


 -> 오토핫키 플러스 명령어 목록 바로가기

'유틸리티' 카테고리의 다른 글

[Ahk+] 오토핫키+ 명령어 적용된 AutoHotkey.exe  (1) 2015.10.07
Pixel Color Picker(스크립트)  (2) 2015.09.05
Posted by 와이로

새 명령어를 Autohotkey C++ 소스에서 추가하려면 6단계의 작업이 필요합니다.

(globaldata.cpp 부분에 영문 코멘트로 설명되어 있습니다.)

 

스크린좌표에 존재하는 윈도우 핸들을 얻는 명령어를 추가 했을 경우를 예로 들겠습니다.

PointGetWindow, x, y , OutWindowVar, [OutControlVar, 1|2|3]

 


1. globaldata.cpp - 명령어구성 추가

{_T("PointGetWindow"), 3, 5, 5, {1, 2, 5, 0}}

- 인자 3, 5, 5 값은 각각 어규먼트 최소개수, 최대개수, 최대개수입니다.
- 인자 {1, 2, 5, 0} 값의 1, 2, 5 는 어규먼트번호이며 해당 어규먼트 입력값이 변수인경우 해당 변수의 값을, 변수가 아닌경우 입력값 그대로 가져옵니다.

- 만약 {1, 2, 5, 0} 자리에 NULL 값이 들어가면 모든 어규먼트 입력값을 변수가 아닌 입력값 그대로 가져옵니다. (4단계에서 입출력 변수로 설정된 인자는 제외)

 

2. defines.h - 액션ID 추가
ACT_POINTGETWINDOW

- 명령어구성 리스트와 일대일 대응하므로 순서가 어긋나면 오류가 발생합니다.

 

3. script.h - Line 클래스 내부에 선언문 추가
ResultType PointGetWindow(int pointx, int pointy, DWORD aOptions);

- 추가 명령어 호출시 동작할 함수의 원형을 선언합니다.

 

4. script.h - 변수 입출력 타입 설정 구문 추가

아래는 3번(OutWindowVar) 과 4(OutControlVar) 어규먼트를 출력변수로 설정하는 방법입니다.

case 2:  // Arg #3
    switch(aActionType)

    {

    ....

    ....
    case ACT_POINTGETWINDOW:

        return ARG_TYPE_OUTPUT_VAR;

    }

    break;

case 3:  // Arg #4
    switch(aActionType)
    {

     ....

     ....
    case ACT_POINTGETWINDOW:
        return ARG_TYPE_OUTPUT_VAR;
    }
    break;

 

5. script.cpp - 명령어로 함수 호출하는 파트 추가

case ACT_POINTGETWINDOW:

    return PointGetWindow(ArgToInt(1), ArgToInt(2), ArgToUInt(5));
 

6. script.cpp - 실제 호출함수 정의

추가된 명령어 호출시 동작할 함수를 구현합니다.

실제 구현시에는 Line::MouseGetPos() 함수를 변경해서 만들었습니다.

ResultType Line::PointGetWindow(int pointx, int pointy, DWORD aOptions)
{

    Var *output_var_parent = ARGVAR3;

    Var *output_var_child = ARGVAR4;


    ....

    ....

    if (!output_var_parent->AssignHWND(parent_under_cursor))
        return FAIL;
}

 

 


 

 

아래는 PointGetWindow 명령어를 추가한 C++ 소스파일입니다.

VC2010 에서 F5 키로 디버깅모드 실행하면 Test.ahk 스크립트 테스트가 가능합니다.

AutoHotkey_L-AddNewCmd.zip

 

 

<테스트 스크립트>

PointGetWindow, 10,10, hwnd
WinMove, ahk_id %hwnd%,, 50,0
MsgBox % hwnd

 

 

<명령어 추가를 위한 소스코드 수정 위치 스샷>

소스코드에서 '명령어추가' 로 검색하시면 모든 수정 위치를 찾을 수 있습니다.

 

 

 

1단계 globaldata.cpp - 명령어구성 추가 위치

 

 

2단계 defines.h - 액션ID 추가 위치

 

 

3단계 script.h - Line 클래스내부 호출함수 선언문 추가 위치

 

 

 

4단계 script.h - 변수타입 설정 위치

입출력 변수 설정이 필요없는 경우는 생략해도 되는 파트이며 변수타입 설정위치는 입출력에 사용될 변수의 위치에 따라 달라집니다. PointGetWindow 명령어의 경우 Arg #3 과 Arg #4 파트에 위치시켜야 해당 변수들이 출력변수로 적용됩니다.

 

 

 

5단계 script.cpp - 명령어로 함수호출하는 파트 추가 위치

 

 

 

6단계 script.cpp - 실제 호출함수 구현

 

 

 

 

 

 


Posted by 와이로