Language : AutoHotkey_H

Author : PhiLho, http://www.autohotkey.com/board/topic/17722-show-animated-gifs-in-your-gui/

Function : Animates gif on GUI, gif 파일 애니메이션을 gui안에 내장한다

Source : http://www.autohotkey.com/board/topic/17722-show-animated-gifs-in-your-gui/

 

Lib

Animate GIF GUI.zip

'프로그래밍 > Archive' 카테고리의 다른 글

L 유니코드32비트 1.1.19.03  (11) 2015.02.21
암호화 , 복호화 프로그램  (16) 2015.02.19
Animate gif GUI  (0) 2015.02.19
메모리최적화 MemoryInfo  (0) 2015.02.15
로그인 폼디자인  (0) 2015.02.05
파일,폴더 가상화 Virtualization  (14) 2015.02.03

 

미니 에디터

사용법이 말할것도 없을정도로 간단합니다! 명령어 적으시고 실행누르시면 소스코드(.ahk) 저장 할 필요없이 실행됩니다.

강의글에서 사용하는 예제나, 다른 흥미로운 코드를 테스트해볼떄 지저분하게 코드파일을 계속해서 저장하지 않아도 됩니다.

 

네이버가 제공하는 프로그래머용 글꼴 '나눔고딕코딩' 을 기본으로 사용합니다.

그리고 드래그드롭이 가능하니, 불러오기 할 필요없이 소스코드를 드래그드롭하시면 자동으로 파일을 불러옵니다.

 

또한, 임시코드보관함을 사용해서 수정전의 코드를 임시로 보관하거나 예제를 바꿔가며 테스트가 가능합니다!

 

 

저는 개발할때는 Scite4AutoHotkey 를 사용하고, 예제 등을 테스트할때는 이걸 사용하네요.

유용하게 쓰시길 바랍니다!

 

미니 에디터.zip

 

Credits : GeekDude, Lexikos, szujeq

Based on GeekDude's CodeQuickTester

Last Modified by Soft (2015/02/18)

  1. 그리고나 2015.05.14 19:35 신고

    드래그 앤 드롭이 안되어서 더 불편하네요;;
    본문에는 드래그 앤 드롭이 가능하다 하셨으나
    파일명에 방패마크를 보니 아마도 Compile_AHK_를 사용하여 관리자 권한 실행을 넣으셨네요
    윈도우8 사용자 계정은 관리자권한을 넣으면 드래그 앤 드롭이 안됩니다
    기본적인건데 아마도 아실텐데 잠시 깜빡 하셨나봅니다
    관리자 권한을 빼고 재 컴파일 부탁합니다
    귀찮으시면 소스 경로 좌표 좀 부탁합니다

    • BlogIcon 예지력 2015.05.14 21:55 신고

      오토핫키 소스에 권한을 올려놓고 빌드한거라 관리자권한으로 컴파일됬나보군요. 저도 윈도우8인데, 사용자권한수준을 낮춰어서 그리고나님 컴퓨터에서 그런 문제가 생길지 몰랐습니다.

      제가 현재 모바일이고, 최근에는 컴퓨터하는 시간이 아예없어서 당장은 수정버전이나 소스코드를 올려드리긴 힘들듯하네요. 여유가 생기면 바로 올려볼게요.

      급하시다면, 네이버에 윈도우8 드래그드롭 검색으로 락을 해제하는 방법을 알아보세요.
      http://housegod.tistory.com/156

 

함수를 Try 하고, 예외발생시 에러코드를 Throw 하고 Exception 을 Catch 한다.

 

Try 는 알고리즘을 구성할때 굉장히 중요하고, 필수적인 문법입니다. 이미지서치할때 ErrorLevel 을 확인하죠?

에러레벨을 반환하는 과정이 바로 Try하고 Catch 하는 과정입니다.

 

기본적인 Try, Catch 코드를 확인해보겠습니다.

 

try  ; 함수를 시도한다
{
    HelloWorld()
    MakeToast()
}
catch e  ;try 함수의 Exception 을 관리합니다
{
    MsgBox, Exception 이 Throw 되었습니다 `nThrow된 함수: %e%
    Exit
}

HelloWorld()  ; 항상 성공하는 함수, Exception 이 없습니다
{
    MsgBox, 안녕하세요!
}

MakeToast()  ; 항상 실패하는 함수, Exception 이 생성됩니다
{
    ; try 부분의 Catch 함수로 점프
    throw A_ThisFunc " 가 실패하였습니다."

 

Try와 Catch 기본.ahk

 

Try  함수를 실행하는 부분입니다. 위 코드에서는 HelloWorld() 와  MakeToast() 라는 2개의 함수를 실행했습니다.

Throw : Exception 을 던져줍니다. 위 코드에서는 MakeToast() 함수가 Throw 했습니다.

Catch : Exception 즉 , 예외를 받습니다. Throw를 받아와 정보를 얻습니다. 위 코드에서는 A_ThisFunc " 가 실패하였습니다." 라는 예외를 받았습니다.

 

주석을 달았으니 알고리즘에 대한 이해는 어느정도 되실거라 예상합니다. 그러면 구체적으로 Try 와 Catch 에 대해 설명해볼게요

 

Try는 블럭 { } 으로 감싸주어야합니다.

 

try {
    ...
} catch e {
    ...
}

 

 

Catch 는 아래와 같습니다.

 

Catch [, 저장할변수]
{
     ...
}

 

저장할변수는 생략이 가능한데, 변수설정시에는 아래 5가지의 정보가 오브젝트로 저장됩니다.

What : 명령 또는 실행된 함수 또는 에러가 실행된 때에 대한 이름

File : 에러가 발생한 스크립트 파일의 경로

Line : 에러가 발생한 곳의 줄 번호

Message : 에러 메세지 또는 ErrorLevel 값

Extra : 에러에 대한 부가적인 설명

 

Try, Catch 구문을 사용하는 이유는 코드를 작성할때, 모든 경우의 알고리즘을 작성할 것이 아니기 때문입니다.

또한 에러레벨보다 다양하게 예외의 상황에 대처하게끔 만들수있기 떄문이죠.

Try , Catch 구문을 통해 정교한 프로그램을 만드시기 바랍니다!

 

try
{
    obj := ComObjCreate("ScriptControl")
    obj.ExecuteStatement("MsgBox ""내장 VBScript""")
    obj.InvalidMethod() ; 런타임 에러를 발생시킴
}
catch e
{
    ; For more detail about the object that e contains, see Catch.
    MsgBox, 16,, % "Exception이 throw되었습니다!`n`nwhat: " e.what "`nfile: " e.file
        . "`nline: " e.line "`nmessage: " e.message "`nextra: " e.extra
}

 

Catch 에러레벨.ahk

  1. ㅁㄴㅇㄹ 2015.03.14 19:07 신고

    사이트 한번 깔끔하네요 와 진짜 잘만들었네ㅋㅋㅋ 강의도 깔끔하고

Language : AutoHotkey_H

Author : jNizM

Function : Shows info about memory via AutoHotkey

Source : http://ahkscript.org/boards/viewtopic.php?f=6&t=142&p=38270#p38270

 

소스코드

'프로그래밍 > Archive' 카테고리의 다른 글

암호화 , 복호화 프로그램  (16) 2015.02.19
Animate gif GUI  (0) 2015.02.19
메모리최적화 MemoryInfo  (0) 2015.02.15
로그인 폼디자인  (0) 2015.02.05
파일,폴더 가상화 Virtualization  (14) 2015.02.03
GUI Skinning Method  (0) 2015.02.03

오토핫키는 GUI(Graphical User Interface) 를 쉽게 사용할 수 있습니다.

단순히 입력명령어들로만 매크로를 제작할수있지만, 보다 직관적인 프로그램을 위해서는 인터페이스가 제공되어야겠죠

또한 기본 윈도우 외관에서 벗어나, 아래처럼 새로운 스킨들로 개성있는 인터페이스창을 만들수있습니다.

 

필요한 파일

ㅡ USkin.dll 파일이 필요합니다 여기를 클릭해 다운로드하세요.

ㅡ 테마(스킨)파일이 필요합니다, 위 링크에 'skin.zip' 을 다운받으세요.

ㅡ 라이브러리 함수가 필요합니다. AutoHotkey/Lib 폴더 혹은 자신의 소스코드와 동일한 경로에 두세요.

SkinForm(Param1 = "Apply", DLL = "", SkinName = ""){
    if(Param1 = Apply){
        DllCall("LoadLibrary", str, DLL)
        DllCall(DLL . "\USkinInit", Int,0, Int,0, AStr, SkinName) ; For 유니코드
        ;DllCall(DLL . "\USkinInit", Int,0, Int,0, Str, SkinName) ; For ANSI
    }else if(Param1 = 0){
        DllCall(DLL . "\USkinExit")
        }
}

SkinForm.ahk

GUI 창에 적용하기

USkin.dll 은 기본 GUI의 외관 리소스파일들을 교체함으로서, 오토핫키 문법에 아무런 영향을 주지 않습니다.

따라서, DllCall로 USkin.dll의 함수를 꺼내쓰고 기존의 코드는 수정할것이없습니다.

스크립트 최상단에 아래의 코드를 입력하세요, 모든 GUI의 리소스파일이 테마파일로 교체됩니다.

SkinForm(Apply, A_ScriptDir . "\USkin.dll", A_ScriptDir . "\스킨파일명.msstyles")

GUI창을 닫을떄, 핸들이 새는것을 막기위해 USkin.dll 을 종료해야합니다

SkinForm(0)

아래 코드는 'Milkymac.msstyles' 스킨을 사용하는 GUI 예제입니다.

#NoEnv
#SingleInstance force
SkinForm(Apply, A_ScriptDir . "\USkin.dll", A_ScriptDir . "\Milikymac.msstyles")
OnExit, GetOut
Gui, add, button,xm w100 h40, Button
Gui, add, edit, xm y+20 w100 h20, Edit
Gui, add, listbox,xm y+20, ListBox
Gui, add, checkbox,xm y+20, checkbox
Gui, add, DDL, xm y+20, DropDownList
Gui, Show, AutoSize, Test
return

GetOut:
GuiClose:
Gui, Hide
SkinForm(0)
ExitApp
return

SkinForm(Param1 = "Apply", DLL = "", SkinName = ""){
    if(Param1 = Apply){
        DllCall("LoadLibrary", str, DLL)
        DllCall(DLL . "\USkinInit", Int,0, Int,0, AStr, SkinName)
    }else if(Param1 = 0){
        DllCall(DLL . "\USkinExit")
        }
}

예제.ahk

 

스킨파일(.msstyles) 이 많아 하나하나 확인해보고싶은데 너무 귀찮으시죠? 각 스킨을 미리보기로 미리보는 '프리뷰' 프로그램을 사용하세요

USkin.dll이 있는 폴더에서 실행하세요!

프리뷰.zip

  1. BlogIcon 오토핫키 2015.09.18 14:50 신고

    이야 이런게 있는진 몰랐네요. 잘 쓰겠습니당 -0-

  2. 박지민 2016.02.11 12:35 신고

    이런기능이 있엇다니 정말.. 대단한거같습니다.
    다만 dll이랑 msstyles가 다른위치에 잇으면 스킨이 적용되지않던데

    혹시없어도 적용되는 방법이 잇을까요?

  3. 2016.07.07 17:35 신고

    진짜 설명엿같이해놨네 이걸어떻게따라하냐? 3시간따라하다가 포기한다 ㅆㅂ

  4. ㅇ1 2016.07.07 18:02 신고

    설명진짜 엿같이해놓으셨네요 이걸어떻게따라합니까 여기 다 오는사람들 초보인데 ㅡㅡ

  5. 오핫개미 2016.08.27 21:46 신고

    예지력님 안녕하세요. 오핫카페에서 활동하는 오핫개미입니다.
    예지력님 글 보고 다행히 GUI 에 스킨을 입힐 수 있게 되었습니다. 감사합니다.
    궁금사항이 있는데 타이틀바에 폰트 색을 바꾼다던가 타이틀바의 길이를 늘리는 등은 어떻게 하나요?

    • BlogIcon 예지력 2016.08.28 22:57 신고

      제가 알고 있는 한에서는 저도 모릅니다
      시스템 설정에서 관련하는 부분으로 알고 있어서요

  6. ㅇㅇ 2016.09.09 16:53 신고

    잘쓰고있다가 갑자기 어느순간부터 컴파일을하면 gui스킨이 적용되지않습니다.
    갑자기 그러는데 왜그런지 아시나요?

  7. 프로 2016.10.19 18:11 신고

    그 스킨입히고 컴파일후 더미다 패킹을하면 스킨이 몇몇부분에서 적용이 풀리던데 해결방법 아시나요ㅠ

  8. 왕초보 2017.05.15 00:36 신고

    윈도우포럼의 왕초보라고 합니다..
    좋은것을 배우고 갑니다..
    항상 좋은일만 있으세요..

  9. 궁금 2017.07.16 07:53 신고

    위에 다운스킨 말고 새로 스킨 따로만들어서 적용할 수 있나요?

    가능하다면 어떤 프로그램으로 스킨 수정이 가능한가요?

  10. dsaafds 2017.10.22 00:10 신고

    스킨적용이 안되시는분은 오토핫키 32비트버전을 이용해주세요.
    만약 아니라면 지랄마세요 64비트쓰고있는거맞으니까 닥치고 32비트깔으세요.

  11. 초보 2017.12.05 22:53 신고

    전 3일차 초보인데 이정도면 엄청 친절한 설명인거 같고요
    예제도 있고, 감사하게 잘 사용중 입니다.
    이것도 못하시는 분들은 오토핫키는 커녕
    간단한 유틸 프로그램 조차 못다루시는 분들 같은데 ㅋㅋ

시작하기 전에

1. FileInstall 명령어를 아셔야합니다. 여기를 클릭하시면 명령어 설명으로 이동합니다

2. DllCall 명령어를 아셔야합니다. 여기를 클릭하시면 설명으로 이동합니다.

3. 외부 DLL파일이 필요합니다. 여기를 클릭해 다운로드페이지로 이동합니다

가상화 방법

bxsdk32.dll 파일을 소스코드파일과 동일한 경로에 위치시키세요.

특정 폴더를 가상화시키기 위한 코드는 아래와 같습니다.

hModule := DllCall("LoadLibrary", str, A_ScriptDir "\bxsdk32.dll") ; DLL파일을 불러온다
DllCall("bxsdk32\BoxedAppSDK_Init") ; DLL파일을 시작한다
DllCall("bxsdk32\BoxedAppSDK_CreateVirtualDirectoryA", AStr, 폴더경로, Int, 0) ; 폴더경로 를 가상화한다

가상화를 종료하고, DLL파일을 닫기 위한 코드는 아래와 같습니다.

DllCall("bxsdk32\BoxedAppSDK_Exit") ; 가상화를 종료한다
DllCall("FreeLibrary", "UInt", hModule) ; DLL파일을 닫는다
  1. 까망 2015.02.27 10:35 신고

    질문있어요
    폴더 가상화 했는데 100M정도요
    근데 '시스템 호출에 전달된 데이터 영역이 너무 작습니다' 오류 메세지가 뜨는데
    100M면 너무 큰가요?

    • BlogIcon 예지력 2015.02.27 18:04 신고

      아뇨, dll에 따른 문제는 아닐껍니다. 다른 요인때먼이라고 생각되네요
      근데100mb 정도의 파일을 가상으로 추가하고싶으시면 패커나 BinRun 라이브러리로 애초 파일에 내장해두는것이 좋을거같습니다.

  2. 용가리맨 2015.03.02 21:56 신고

    가상화 하면 장점이 먼가요

    • BlogIcon 예지력 2015.03.03 22:50 신고

      실제 디스크를 쓰지않으니, 리소스파일들을 컴퓨터에 설치할필요가없어 깔끔한 싱글 파일로 배포가 가능하겠죠?
      외장하드같은 경우에는 깨울필요가없고

  3. 요이요이 2015.04.14 00:31 신고

    안녕하세요 질문 하나만 드리고싶은데요

    혹시 L버전에서는 정상작동하는데 왜 베이직버전에선 정상작동을 안할까요? 되게하는 방법은 없나요..?
    버전별 DLLCall을 열어보았는데 특별히 다른점은없더라구용.. 답변주시면 감사하겠습니다 ^^!

    • BlogIcon 예지력 2015.04.15 22:43 신고

      문법에 조금 변경이 생기고, 기능추가가 L에서 됬으니까요
      베이직은 업데이트가 중단된지 7-8년 정도 됬습니다...

  4. 최고에요 2015.05.02 18:44 신고

    오토핫키 베이직 버전을 사용해서 가상화할수있는 방법은 없을까요?
    이미지 화일이 너무 많아 지저분하고 , 어떤 이미지를 이용하는지 노출되면 안되는 까닭에 여기까지 왔습니다 만, 제가 베이직밖에는 쓸줄몰라서 곤혹스럽네요.
    다른 방법은 없을까요...

    질문한김에 질문하나더 드려봅니다.
    텍스트문서로 만들어진 로그인정보를 불러오는 매크로를 작성했는데.. id와 password가 그대로 노출되있어서 해결책이 없을까 싶습니다.
    감사합니다.

    • BlogIcon 예지력 2015.05.04 21:37 신고

      베이직은 제가 사용을 안해서 방법을 모르겠습니다

      아이디와 패스워드가 그대로 노출된다는게 텍스트문서에 표기되어있기 때문인가요? 그렇다면 텍스트문서를 암호화하는 방법이 있겠네요

  5. 최고에요 2015.05.04 22:59 신고

    아.. 그러니까 암호화하면 되겠다는건 알겠는데.. 그 방법을 어찌해야할지 몰라서요... 너무 막연한질문인가요..

    • BlogIcon 예지력 2015.05.08 08:42 신고

      AES 암호화 등의 방법을 사용해서 텍스트파일을 암호화하고
      오토핫키에서 FileRead나 다른방법으로 텍스트파일을 읽을떄 복호화 과정을 거쳐야합니다.
      구글링으로 autohotkey encryption 찾아보면 많이 나오니까 확인해보세요. 단순히 댓글로 설명하기에는 관련 소스가 너무 많습니다.

  6. dww 2016.02.21 19:15 신고

    혹시예지력님이 올리신 gui 스킨을파일을 가상화하려고하는데
    아무리 해봐도 안되네요 ㅠㅠ 도움좀

  7. 가상화궁금증 2016.03.02 18:12 신고

    안녕하세요 테일에서도 가상화 방법보고 예문을 가지고 해봤는데요..
    hModule := DllCall("LoadLibrary", str, A_ScriptDir "\bxsdk32.dll") ; DLL파일을 불러온다
    DllCall("bxsdk32\BoxedAppSDK_Init") ; DLL파일을 시작한다
    DllCall("bxsdk32\BoxedAppSDK_CreateVirtualDirectoryA", AStr, A_Temp, Int, 0) ; 윈도우 임시폴더를 가상화
    FileInstall, test.txt, %A_Temp%\test.txt, 1 ; 임시폴더에 test.txt 파일을 설치
    Run, %A_Temp%\test.txt ; 임시폴더의 test.txt 파일 실행
    return

    이대로 실행을하면 test.txt파일을 찾을수 없습니다라고 뜹니다.

    그런데 또 동봉된 예문 jpg로된 스크립은 됩니다.. 어떤부분이 문제일가요?

 

FileInstall 명령어를 아시는지요?

 

파일인스톨, 스크립트 실행시 파일을 설치하는 명령어입니다.


파일은 어떠한 것이든지 상관없습니다. Dll 파일이든지, 이미지파일이든지 혹은 EXE 실행파일이라 하더라도요.


FileInstall, 설치할파일명.확장자, 설치할경로\파일명.확장자, 1


간혹, FileCopy 명령어와 혼동하시는분이 있는데,

FileCopy 파일카피는 파일을 복사해서 이동하는것이기 때문에

복사할 파일이 반드시 있어야 합니다.


파일인스톨은 파일을 '설치'합니다. 컴파일했을 경우에는 설치파일이 EXE파일안에 내장됩니다.

즉, 컴파일후에는 설치할 파일이 없어도 파일을 설치경로에 설치합니다.


따라서, 다른 파일을 이용해야한다거나 이미지파일을 포함해서 프로그램을 배포하고싶을때 유용하겠죠?


FileInstall 명령어 맨 뒤에 붙은 , 1 은 덮어씌운다는 표현입니다.

생략한다면 설치경로에 파일이 이미 존재할시에는 설치를 진행하지 않습니다.


FileInstall, Name.txt, C:\Name.txt, 1        ; 소스경로에 있는 Name.txt 파일을 C드라이브-Name.txt에 설치
FileInstall, Skin.dll, %A_Temp%\Skin.dll, 1    ; 소스경로에 있는 Skin.dll파일을 Temp폴더-Skin.dll로 설치


파일인스톨은 단점을 굳이 적는다면

디렉토리(경로)에 파일을 설치하는것이기때문에

많은 파일들을 설치할 경우에는 설치된 파일들때문에 더러워보이기도합니다.


이를 해결할 방법으로는

FileSetAttrib 명령어를 사용해서 파일의 속성을 숨김으로 설정해 보이지않게 설정하는 방법이 있지만

만약 사용자의 컴퓨터가 '숨김 파일 보기' 를 설정했다면 이마저도 소용이없습니다.


다음에는 파일자체나, 경로를 가상화함으로서 파일인스톨 역시 가상화시키는 글을 적어보겠습니다.

가상화방법을 사용하면 파일을 가상의 경로 즉, 램메모리에 설치함으로서

실제로는 어떠한 위치에서도 파일을 찾아볼수없게 만들수있습니다.


다음 글을 기대해주세요!

 

자동화는 오토핫키가 가장 특화한 영역입니다. 많은 분들이 오토핫키에 발을 들이는 이유이기도하지요.

이 글을 읽고나면 업무자동화 등 반복적인 작업을 자동화하는 프로그램은 직접 제작하실수있습니다.

 

시작하기 전에

 

오토핫키에 아직 미숙하신 분여기를 클릭해 소스코드 생성과 컴파일방법을 확인하세요.

ㅡ 이 글은 반복적인 작업자동화 프로그램 제작 강의글입니다.

ㅡ 소스코드 작성에 필요한 모든 명령어,문법 등을 다룹니다. 따라서, 방대한 글이 될 것입니다.

ㅡ AutoHotkey_L 1.1.19.1 유니코드 버전에서 작성했습니다. 설치는 여기를 클릭하세요

ㅡ 오토핫키 공식에디터 Scite4AutoHotkey 를 사용합니다. 설치는 여기를 클릭하세요

 

 

사용할 명령어 필수인것은 '필수' 알아두면 도움이 되는것은 '옵션'으로 표기합니다

 

  • ㅡ [필수] HotKey 지정문법
  • ㅡ [필수] Send / SendPlay / SendInput / SendMode
  • ㅡ [필수] Click / MouseClick / CoordMode
  • ㅡ [필수] Sleep
  • ㅡ [필수] Loop / Break / Continue
  • ㅡ [필수] If / Else / 변수 표현식
  • ㅡ [옵션] ImageSearch / PixelSearch
  • ㅡ [옵션] ControlSend / ControlClick
  • ㅡ [옵션] Run / RunWait
  • ㅡ [옵션] SetTimer / Critical
  • ㅡ [옵션] WinActivate / WinWaitActive
  • ㅡ [옵션] Gui 문법 / MsgBox / Reload 문법
  • ㅡ [옵션] 자세한 Expression / 연산자 / 변수 문법
  • ㅡ [옵션] SingleInstance / 스크립트 설정 문법
  • ㅡ [옵션] Object / Array 문법
  • ㅡ [옵션] ActiveX 문법 / 웹 자동화

 

 

필수 명령어

 

1. HotKey 지정문법

HotKey 핫키 는 키보드 키 또는 키조합입니다. 핫키를 설정한 다음에 핫키를 누름으로써 특정액션을 취하게 설정할 수 있습니다.

 

A::
MsgBox, A키 눌렀네
Return ; 여기까지 실행하고 끝낸다

 

※ 세미콜론 ; 는 주석으로 일종의 코멘트입니다. ; 이후의 말은 코드실행에 아무런 영향을 주지않습니다.

위 소스코드를 적고, 실행해보세요. 키보드 A(한글 ㅁ)키를 누르면 "A키 눌렀네" 라는 메시지박스가 나옵니다.

 

 

HotKey 정리

따라서, 핫키를 지정하고 사용하는 방법은 아래와 같습니다.

 

핫키지정::

핫키를 눌렀을시 실행할 명령어

Return

 

추가로, 핫키지정은 'A' 처럼 단독 키뿐만아니라 컨트롤(Ctrl), 알트(Alt), 키와 조합이 가능합니다.

ㅡ 컨트롤(Ctrl) 키는 ^ 로 표현하고

ㅡ 알트(Alt) 키는 ! 로 표현합니다

 

^A::
MsgBox, 컨트롤 + A 키를 눌렀네요
Return
!A::
MsgBox, 알트 + A키를 눌렀네요
Return

 

 

2. Send / SendPlay / SendInput / SendMode

Send 는 키보드입력을 보내는 명령어입니다.

SendPlay 는 게임키입력에 최적화되어있는 Send명령어입니다. (한글입력 불가)

SendInput 은 Send보다 빠르고 안정적인 Send입니다.

 

!X::
Send, 이것이 Send명령어입니다 {Enter} ; 이것이 Send명령어입니다 입력후 엔터
SendPlay, This is SendPlay {Enter} ; This is SendPlay 입력후 엔터
SendInput, 이것은 SendInput {Enter} ; 이것은 SendInput 입력후 엔터
return

 

 

위 소스코드에서 확인할수있듯이,

엔터와 같은 키보드 자체의 키를 표현하기 위해서는 { } 괄호를 사용해야합니다.

Enter 로 적으면 엔터키가 아니라 "Enter" 라는 문자를 적겠죠.

따라서 컨트롤키는 {Ctrl}, 알트키는 {Alt}, 스페이스바는 {Space}, Esc는 {Esc}, Home 키는 {Home}, PgUp키는 {PgUp} 등으로 표시해야합니다.

 

Send와 SendPlay 그리고 SendInput 등 따로따로 적어서 사용할수도 있지만

SendMode, 사용할모드 를 적어주면 Send로도 Send사용모드 로 자동변환되어 사용할 수 있습니다.

아래 코드를 확인하죠

 

SendMode, Input  ; 모든 Send명령어를 SendInput 방식으로 변환한다
!X::
Send, {a}  ; SendInput, {a} 와 동일한 성능을 구현합니다.
Send, {A}

return

 

추가로, 위 코드의 결과에서 {a} 와 {A} 가 어떻게 다른지 확인이 가능하죠?

Send, {a} 는 소문자 a를 입력하고

Send, {A} 는 대문자 A를 입력합니다.

 

Send 정리

따라서, Send는 아래의 예처럼 사용합니다.

 

SendMode, Input  ; 모든 Send명령어를 SendInput 방식으로 변환한다
!X::
Send, 입력할 문자/문자열
Send, {입력할 키}
return

 

 

3. Click / MouseClick / CoordMode

두 명령어 둘다 마우스클릭을 합니다.그러나 Click이 MouseClick 보다 간단해서 더 자주 사용합니다.

 

Click 

현재 마우스커서 위치에서 마우스왼쪽버튼 클릭

Click 44,55 

컴퓨터화면 x좌표 44 y좌표 55 지점을 마우스 왼쪽클릭 

Click Right 44, 55

컴퓨터화면 x좌표 44 y좌표 55 지점을 마우스 오른쪽클릭 

Click 2

현재 마우스커서 위치 마우스왼쪽버튼 2번 클릭 

Click Down 

마우스 왼쪽 버튼을 누르고 있는다.

Click Up Right 

마우스 오른쪽 버튼을 뗀다.

Click %변수1%, %변수2%

컴퓨터화면 x좌표 변수1, y좌표 변수2를 마우스 왼쪽클릭 

 

Click 명령어에서 사용되는 X좌표와 Y좌표는 CoordMode 좌표설정명령어의 영향을 받습니다.

따로 CoordMode 명령어를 명시하지않을시, Screen 좌표로 설정됩니다.

가능한 Screen 좌표는 사용하지않는것이 좋습니다. 밑으로 내려가면서 이유를 설명하죠

 

Screen 좌표는 컴퓨터 전체화면에서의 좌표를 뜻합니다.

컴퓨터 해상도 1920 * 1080 의 경우 화면 왼쪽 맨위에서부터 0,0으로 좌표는 시작됩니다.

오른쪽으로 갈수록, X좌표값이 증가하고

아래로 내려갈수록, Y좌표값이 증가합니다.

그러므로, 화면 오른쪽 맨아래의 좌표는 1920, 1080 이 됩니다.

 

정확한 좌표를 확인하기 위하여 오토핫키 설치시 제공되는 프로그램을 이용해보겠습니다.

본인 컴퓨터의 오토핫키 설치폴더로 가면 'AU3_Spy.exe' 이라는 파일이 있습니다, 실행하세요.

 

 

실행하고, 바탕화면 빈공간을 클릭해보세요.

 

 

사진의 빨간색으로 표시한 부분에서

Absolute, Relative 그리고 Client 가 보이시나요?

 

Absolute 는 Screen 좌표를 뜻합니다. = 컴퓨터의 전체화면에서의 좌표

Relative 는 활성창의 좌표를 뜻합니다.= 활성창의 좌표, 현재는 활성창이 바탕화면

Client 는 활성창의 작업창(최소호,최대화,닫기)를 제외한 좌표를 뜻합니다. = 사용빈도 X

 

위에서 Screen 좌표를 사용을 최대한 지양하라 했습니다.

그 이유의 예로는,

스크린 좌표를 이용해서 프로그램 내의 특정부분을 클릭하게 만든 경우

프로그램의 위치를 이동하면 엉뚱한 부분을 클릭하기 떄문입니다.

위 사진은 활성창이 바탕화면이기 때문에 Screen좌표와 Relative 활성창좌표가 동일한것일뿐

 

따라서 무조건 프로그램 자체내의 좌표, =활성창 좌표 Relative 를 이용하는 것이 좋습니다.

활성창좌표는 창을 기준으로 (0, 0) ~ (창크기X좌표, 창크기Y좌표) 로 되어있겠네요.

 

한번 활성창좌표와 Click 을 사용하여 에디터창의 스크립트실행 버튼을 눌러보도록 하겠습니다.

 

 

에디터 Sctie4AutoHotkey 의 스크립트시작 버튼의 Relative 좌표를 확인해야겠죠?

X좌표 397, Y좌표 64이네요.

 

또한 소스코드에 Click 명령어가 클릭하는 좌표가 활성창좌표라는 것을 명시해야합니다.

CoordMode, Relative 로 적어두면 소스코드에 표기하는 모든 좌표를 활성창 기준으로 잡습니다.

 

CoordMode, Relative  ; 좌표모드를 Relative 활성창 기준으로
!X::
Click 397,64 ; 활성창 397, 64 좌표를 클릭
return

 

실행결과는 예상한대로입니다. 시작버튼을 클릭하네요!

그런데 스크립트를 실행시킨상태에서 또 다시 시작버튼을 누르면 아래와 같은 확인메시지가 출력됩니다.

 

 

이미 스크립트가 실행되고 있으므로, 새로 실행할 것인지 묻는 메시지군요

'예' 를 누르면 새로실행할것이고, '아니요'는 새로실행하지 않습니다.

위 메시지와 관련한 모든부분은 [옵션]의 SingleInstance / Reload 부분에서 다룹니다.

 

Click 정리

따라서, Click 명령어는 아래의 예처럼 사용합니다.

 

CoordMode, Relative  ; 모든 좌표를 활성창으로 설정한다
!X::
Click, x좌표, y좌표 ; 활성창 x좌표 y좌표 클릭
return

 

 

4. Sleep

키보드, 마우스입력을 했다가 잠시쉬고 다시 입력을 보내고 싶으시죠?

잠시 쉬는것이 'Sleep' 명령어입니다.

 

SendMode, Input
!X::
Send, 안  ; '안' 입력
Sleep, 3000 ; 3000 밀리세컨드 즉, 3초동안 쉰다
Send, 녕 ; '녕' 입력
return

 

밀리세컨드로 시간을 표기해야하므로, 1초는 1000 이 되고, 5.5초는 5500 이 되겠습니다.

 

Sleep 정리

따라서, Sleep 명령어는 아래의 예처럼 사용합니다.

 

핫키지정::
명령어 1
Sleep, 밀리세컨드
명령어 2
Sleep, 밀리세컨드
명령어 3
명령어 4
Sleep, 밀리세컨드
return

 

 

5. Loop / Break / Continue

Loop는 반복문입니다. Break와 Continue는 반복문을 제어하는 명령어이구요.

 

A키를 반복적으로 입력하거나, 오토마우스 처럼 한 위치를 계속해서 클릭하고 싶을때 Loop를 사용합니다.

설마 아래처럼 하시는 분은 없겠죠...

 

!X::
Send, A
Send, A
Send, A
Send, A
Send, A
return

 

Loop를 이용하면 아래처럼 소스를 작성할 수 있습니다.

 

!X::
Loop, 5   ; 괄호안의 명령어를 5번만큼 반복한다
{
 Send, A
}
return

 

Loop명령어는 폴더개수, 특정 확장자 파일의 개수와 모든이름을 구하는등 다양한 활용이 가능하지만

이 글에서는 명령어반복만을 강의하도록 하겠습니다.

 

계속해서 진행하죠

 

!X::
Loop, 5
{
 Send, 안녕하세요 {Enter}
}
MsgBox, 끝났네요
return 

 

위 코드의 실행결과가 어떨지 예상이 되시나요?

 

Loop 괄호 { } 안의 명령어를 5번만큼 반복하고, 괄호밖을 나오게되는데

괄호 밖의 MsgBox 명령어를 만나 '끝났네요' 라는 메시지를 띄우고 return을 만나 끝납니다.

 

반복할 횟수를 생략한다면 무한반복이 됩니다.

 

!X::
Loop
{
 MsgBox, 이 창은 계속 뜹니다
}
return

 

무한반복을 종료하는 방법으로 Break 를 이용합니다.

그전에 먼저 A_Index 라는 오토핫키의 반복문 내장변수에 대해 짚고 넘어가겠습니다.

 

A_index (대소문자 구별X) 은 반복문이 몇번째로 실행중인지 카운트해주는 내장변수입니다.

내장변수 = 자체적으로 값이 설정되는 변수

 

!X::
Loop
{
 MsgBox, % A_Index
 if (A_Index = 5)
  break
}
MsgBox, 5번 실행하고 나왔네요
return

 

위 코드의 결과는 아래와 같습니다

 

 

 MsgBox % A_Index
 if (A_Index = 5)
  break

 

이 부분을 설명해보겠습니다, A_Index 는 반복문의 실행횟수를 저장하는 변수라고 했습니다.

그 변수를 메시지박스로 표현하려면 % 퍼센트 표시를 붙여줘야합니다.

% 없이 적는다면 "A_Index" 라는 글자를 보여주기 때문이죠.

% 표기를 함으로써, 문자나 숫자가 아닌 변수의 저장된 값을 불러옵니다.

 

MsgBox, A_Index  ; A_Index 라는 글자를 띄움
MsgBox, % A_Index  ; 반복문 횟수를 표현
MsgBox, %A_Index%  ; 반복문 횟수를 표현

 

% 하나와 % % 두개에 대한 자세한 설명은 이후의 [필수] 변수 표현식 에서 설명합니다.

 

다음으로 If (A_Index = 5)

If (A_Index = 5) 는 보기만해도 대충 짐작이 가시죠?

A_Index 변수의 값이 5가 될때 다음 명령어를 진행합니다.

 

다음 명령어는 Break 네요,

반복문을 탈출하는 Break는 Loop 괄호밖으로 빠져나갑니다.

Loop 괄호밖에는 '5번 실행하고 나왔네요' 라는 메시지박스가 있네요.

그러므로, 코드의 결과는 위 이미지와 동일합니다.

 

Break 명령어는 가장 가까운 Loop { } 괄호를 빠져나갑니다.

현재의 { } 괄호를 탈출하는것이죠.

무슨 말인지 다음 코드에서 확인해보세요

 

 !X::
Loop
{
    Loop
    {
        MsgBox, 처음실행
        break
    }
    MsgBox,  새끼 루프 탈출
    break
}
MsgBox, 외곽 루프 탈출
return

 

좀 복잡하신가요? ㅎㅎ

실행결과를 보시면 이해가 쉬울거에요

 

 

알고리즘을 순서대로 적어보겠습니다.

0. 알트 + X 핫키를 누르면

1. '처음실행' 메시지박스 출력

2. Break 명령어로 현재의 괄호(= 가장 가까운 Loop) 탈출

2. 괄호밖의 '새끼 루프 탈출' 메시지박스 출력

4. 2번째 Break 명령어로 현재의 괄호 (= 가장 가까운 Loop) 탈출

5. 괄호밖의 '외곽 루프 탈출' 메시지박스 출력

6. return 을 만나 종료

 

그럼 Continue 는 Break 와 다른점이 무엇일까요?

차이점은

Break는 괄호를 탈출시켜서 Loop 반복문을 끝낼수있지만

Continue 는 괄호의 끝으로 가 Loop 반복문을 다시 반복합니다. 즉, 끝나지않습니다.

 

Continue 예제를 하나 확인하겠습니다

 

!X::
Loop, 10
{
    if (A_Index < 5)
        continue
    MsgBox, % A_Index
} ; Continue 는 바로 여기로 이동
return

 

코드를 실행해보면,

메시지박스가 5,6,7,8,9,10 을 차례대로 출력됩니다.

 

A_index, 루프 반복이 5번 미만일때는 Continue 명령어때문에  } 로 이동합니다. 탈출하는것이아닙니다.

그리고 다시 A_Index 값 확인, 5미만이면 } 로 이동, 5이상이면 메시지박스 출력.

루프 횟수를 10으로 설정했으니 이러한 과정을 10번만 거치게됩니다.

 

Loop / Break / Continue 정리

따라서, 반복문과 반복문 탈출은 아래의 예처럼 합니다.

 

!X::
Loop, 횟수, 생략시 무한반복
{
    명령어
    break ;반복문 탈출
}
MsgBox, 반복문 탈출했네요
return

 

 

6. If / Else / 변수와 표현식

If 와 Else 는 조건식입니다. 위에서 간단한 예시로 확인해봤고 실제로도 쓰임은 전혀 복잡하지 않습니다.

A_Index 라는 변수에 대해서도 잠깐 훑어보았는데,

이 챕터에서 조건식과 ,변수, 그리고 이 모든것을 사용하기위한 표현식에 대해서 자세히 배워보도록 하겠습니다.

 

Age = 20     ; Age 라는 변수에 숫자 20을 저장한다
MsgBox, % Age

 

'Age = 20' 이 보이시죠?

주석의 설명대로 Age 라는 변수에 숫자 20을 저장하는겁니다.

 

오토핫키에서 변수는 자료형(데이터의 타입) 을 명시할 필요가 없습니다.

굉장히 편리하죠 C언어는 변수마다 각각 지정해줘야 하는 번거로움이 있는데 말입니다.

 

한가지 중요한점. 변수명은 오토핫키의 명령어나 내장변수(A_index 등) 으로 설정하면 안됩니다.

 

따라서, 변수는 이렇게 지정하는거군요!

 

변수명 = 변수에 저장할 값
Height = 180   ; Height 라는 변수에 숫자 180을 저장
Gender = 남자   ; Gender 라는 변수에 '남자' 라는 문자열을 저장

 

변수1에 변수2의 값을 저장하고 싶다면 어떻게 코드를 작성해야 할까요.

'변수1 = 변수2' 로 하니 '변수1'에는 변수2 라는 문자열이 저장됩니다.

아까 % 표기를 했다는것을 기억하시나요? 여기서도 동일한 문법이 적용됩니다.

 

Age1 = 20                  ; Age1 라는 변수에 숫자 20을 저장
Age2 = %Age1%        ; Age2 라는 변수에 변수 Age1(숫자20)을 대입 
Age3 = Age1             ; Age2 라는 변수에 Age1 이라는 문자 저장

 

위 변수의 표현식은 트레디셔널 이라고 부릅니다. 

표현식엔 종류가 2가지 있는데요. 한가지가 지금 설명한 트레디셔널, 두번째는 익스프레션 입니다.

 

If 조건식과 앞으로 오토핫키를 깊이있게 사용할 생각이 있으시다면,

가능한 표현식은 익스프레션으로 사용하는것이 좋습니다.

이유는 If 조건식과 대부분의 '~식'들이 익스프레션을 사용하기 때문인데요

 

그러면 익스프레션을 또 배워야 하나? 머리아픈데..

아닙니다. 트레디셔널과 정말 비슷합니다 간단해요.

 

Age1 := 20             ;Age1 에 숫자 20을 저장
Age2 := Age1         ;Age2 에 변수 Age1 을 대입
Gender := "남자"   ; Gender라는 변수에 '남자' 문자열 저장 

 

= 대신에 := 을 쓰고, 변수를 대입할 때 % % 표시를 하지않네요.

중요한점은 문자를 저장할때는 " " 따옴표처리를 해야한다는것입니다.

 

그러면 정리하겠습니다.

결국 (익스프레션) 변수는 이렇게 사용하는군요.

 

변수명 := 저장할 숫자
변수명 := "저장할 문자"
변수명 := 대입할 변수명

 

숫자변수끼리는 서로 값을 연산할수도 있습니다.

 

변수명 := 변수명1 + 변수명2       ; 변수명1 과 변수명2를 더한 값을 변수명에 저장
변수명 := 변수명1 - 변수명2       ; 뺀 값을 저장
변수명 := 변수명1 * 변수명2       ; 곱한 값을 저장
변수명 := 변수명1 / 변수명2       ; 나눈 값을 저장

 

문자변수끼리는 문자를 누적이 가능합니다.

 

Apple := "사과"              ; Apple 이라는 변수에 문자 사과 를 저장
Juice := "주스"              ; Juice 이라는 변수에 문자 주스 를 저장
Total := Apple . Juice      ; Total 이라는 변수에 변수 Apple과 변수 Juice 의 값을 누적
MsgBox % Total           ; 사과주스 라는 문자가 출력된다

 

이제 그럼 If , Else 와 연관지어 공부해보겠습니다.

 

Apple := 700
Juice := 300
내야할돈 := Apple + Juice                 ;내야할돈 이라는 변수에 Apple변수와 Juice 변수의 더한값을 저장
가진돈 := 3000
거스름돈 := 가진돈 - 내야할돈           ;거스름돈 이라는 변수에 가진돈 변수에서 내야할돈 변수의 뺸값을 저장
if (내야할돈 > 가진돈)                        ; 만약 내야할돈 변수의 값이 가진돈 변수의 값보다 크다면
    MsgBox, 가진돈보다 비쌈              ; 가진돈보다 비쌈 메시지박스 출력
else if (내야할돈 < 가진돈)                ; 만약 내야할돈 변수의 값이 가진돈 변수의 값보다 작다면
    MsgBox, 거스름돈 %거스름돈% 원 남습니다         ; 거스름돈 계산한 메시지박스 출력
else                                                                  ; 그것도 아니라면 (=가진돈과 내야할돈이 같다면)
    MsgBox, 거스름돈 0원 남겠네                          ; 거스름돈은 0원 남겠군
return

 

실행결과는 짐작할수 있듯이,

 

 

If / Else / 변수와 표현식 정리

 

변수명1 := 저장할 값 또는 변수명
변수명2 := "저장할 문자"
if (조건식)
    조건식이 참일 경우 실행할 명령어 한개
else
    조건식이 거짓일 경우 실행할 명령어 한개
return
; 실행할 명령어가 2개 이상일 경우 { } 괄호로 묶어준다.
if (조건식)
{                  ; 조건식이 참일 경우 괄호의 명령어를 수행함
    첫번째 명령어
    두번째 명령어
    N번째 명령어
}
else               ; 조건식이 거짓일 경우 괄호의 명령어를 수행함
{                       
    첫번째 명령어
    두번째 명령어
    N번째 명령어
}
return

 

 

옵션 명령어

 

1. ImageSearch / PixelSearch

ImageSearch 는 화면에서 이미지를 찾는 명령어입니다. PixelSearch 는 픽셀(점)에서 색상을 찾고요.

이미지서치는 오토핫키에서 가장 핫한 명령어가 아닐까 생각하네요.

[옵션] 으로 분류하기는 했지만 사실상 필수라고 봐도 무방할 정도로 활용도가 높습니다.

 

이미지서치 사용하기위해서는 당연히 찾을 이미지, 즉 이미지파일이 필요하겠죠?

캡쳐뜨는 프로그램은 여러가지이니 원하는거 사용하시면 되겠습니다.

저의 경우 기본적으로 윈도우에 설치되어있는 그림판 을 사용합니다.

 

예로서, 이미지서치를 사용해 내 컴퓨터의 로컬 디스크를 클릭하는 코드를 짜보겠습니다.

내 컴퓨터 창을 캡쳐한다음 로컬 디스크 부분은 잘라야겠죠?

 

 

사각으로 선택해서~

 

 

저 부분만 자르겠습니다.

따라서 이미지는 아래사진과 같겠네요.

 

 

그리고 저 이미지파일을 저장합니다, 반드시 영어이름으로 저장합니다.

저는 'MyCom.png' 로 저장하겠습니다. 소스코드와 동일한 경로에 저장해두세요.

 

이제 코드를 살펴보죠

 

A::
ImageSearch, vx, vy, 0, 0, A_ScreenWidth, A_ScreenHeight, MyCom.png
if ErrorLevel = 0         ; 만약 이미지를 찾았을 경우에는 괄호의 명령어를 수행
{
    Click %vx%, %vy%         ; 이미지찾은 위치 X좌표 Y좌표 클릭
    MsgBox, 찾음                ; 찾음 메시지박스 출력
}
else if ErrorLevel = 1           ; 만약 이미지를 못찾았을 경우에는
    MsgBox, 못찾음             ; 못찾음 메시지박스 출력
return                               ; 여기까지 수행하고 종료

 

A키를 누르면 화면에서 소스파일의 경로의 'MyCom.png' 이미지파일을 찾습니다.

 

그런데 이미지를 찾았는지 못찾았는지 확인을 해야하지않습니까?

그것을 확인할수있는것이 ErrorLevel 내장변수입니다.

이미지파일을 찾았을 경우에는 에러레벨이 0 이 되고, 못찾았을 경우에는 1 이 됩니다.

2로 될때는 이미지파일이 경로에 없어 불러들이지 못하는 경우입니다.

 

MyCom 이미지파일의 전체경로를 적어야하지만, 이미지가 소스코드파일과 같은 경로에있을경우는

앞 경로를 삭제하고 이미지파일명.확장자 만 적어줘도 무방합니다. 위 코드처럼요.

 

간략한 설명을 했으니 이제 이미지서치에 대해 자세히 알아보겠습니다.

 

ImageSearch, 찾은X위치, 찾은Y위치, 시작X, 시작Y, 지점X, 지점Y, 이미지파일경로\이미지파일명.확장자

 

찾은위치X, Y에는 이미지파일의 X,Y좌표가 저장되는 변수입니다. CoordMode 의 영향을 받습니다.

변수명X, 변수명Y 로 적어줘야합니다. 저장이 필요없다면 그냥 생략하고 , 로 넘길수있습니다.

 

시작X, Y 에는 이미지파일을 서칭을 시작할 X,Y좌표를 적습니다. CoordMode 의 영향을 받습니다.

지점X, Y 에는 이미지파일을 서칭을 끝낼 X,Y 좌표를 적습니다. CoordMode 의 영향을 받습니다.

 

시작좌표와 끝 지점좌표를 잘 명시해주면

이미지서치에 걸리는 시간과, 경우에 따라 발생하는 렉을 방지할 수 있습니다만

좌표 구하기가 귀찮기 때문에, 그냥 전체화면에서 찾는게 편합니다.

 

ImageSearch, 찾은X위치, 찾은Y위치, 0, 0, A_ScreenWidth, A_ScreenHeight, 이미지파일경로\이미지파일명.확장자

 

좌표 (0,0) 부터 (A_ScreenWidth, A_ScreenHeight) 까지가 전체화면입니다.

 

A_ScreenWidth, A_ScreenHeight 는

앞서말한 A_index 처럼 내장변수 (= 자체적으로 값이 설정되는 변수) 입니다

 

무엇으로 설정되냐구요?

A_ScreenWidth 는 컴퓨터해상도 X좌표

A_ScreenHeight 는 컴퓨터 해상도 Y좌표 가 되겠습니다.

 

해상도가 1920, 1080 인 컴퓨터의 경우에 A_ScreenWidth 는 1920, A_ScreenHeight 는 1080이 되겠네요.

 

작성중입니다.

  1. 이전 댓글 더보기
  2. 2015.12.13 00:10

    비밀댓글입니다

  3. 2015.12.13 08:25

    비밀댓글입니다

  4. 벚길 2015.12.28 16:59 신고

    저 이미지 서치 부분에서 소스코드 파일경로와 이미지 경로를 같게해도 계속 못찾음이라고 뜨는데 무슨 문제인가요?

  5. 진짜 2015.12.31 15:54 신고

    이렇게 이해하기 쉽다니 놀랍습니다.

  6. Settimer 2016.01.03 06:37 신고

     안녕하세요.

    요즘 settimer를 이용해서 프로그램을 짜고 있는데요.

    settimer 문장을 한번만 실행하고 다음부터는 실행을 하지않습니다.

    도저히 해결이 되지 않아 질문을 해볼까합니다.

    도와주시면 감사하겠습니다. ㅠ.ㅠ

    ↓밑에 소스를 간단히 적었구요.

    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━




    시작:

    {








    내용~~




    goto,검색







    }

    return







    검색:

    {


    {

    시간 := 딜레이*6000
    SetTimer, 휴식, %시간%

    (return) ;;;; [return]을 넣으면 휴식이라는 문장은 잘되는데 [return]밑에 내용은 실행이 되지않습니다.

    왜그러는 걸까요?

    }




    loop

    {


    pixelgetcolor,~~~~~~~~~~

    지정한 좌표에 색값이 달라지면

    {




    goto,확인




    }







    }







    }

    return




    확인:

    {





    이미지서치 (이미지 발견 못함)

    {


    goto,검색

    }

    }

    return

    끝:

    {

    }

    return




    휴식:

    {


    내용

    }

    rerturn






















    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━

    • BlogIcon 예지력 2016.01.03 09:47 신고

      return은 서브루틴(함수,goto,gosub)를 끝내는 명령어니까요

  7. 2016.01.04 12:21

    비밀댓글입니다

  8. 123213 2016.01.07 16:42 신고

    센드, 한글입력시 한글이 입력안되고 꿻뚫 이런식으로 출력되는데 무슨문제일까요

  9. 오토핫키입문자 2016.01.07 19:44 신고

    안녕하세요 예지력님 글들을 꼼꼼히 읽어봤는데요 한가지 궁금증이 듭니다.
    한 키를 꾹 누르거나 또는 한 키를 지정된 시간(1초나 2초나 1.5초 등등) 동안만 누르게 하는 명령어는 없나요?
    Sleep은 조금 다른 개념같아요.. 찾아봐도 없는것 같아 질문글 올려봅니다.
    예를 들어서 스페이스키를 1.5초동안만 누르고 싶다 라고 하면 어떤 명령어를 사용해야 할까요?

  10. 안녕로봇 2016.01.10 19:27 신고

    엔터키를 누르는 명령어인데 메모장에선 잘 실행이되나
    게임안에서 엔터키 입력이안됩니다. 게임상에서 백스페이스 입력도 되는데 엔터키 입력은 안됩니다.
    샌드플레이로도 해보고 했는데 안되네요 어떻게해야할까요.

    그리고 위 예제처럼 이것은 sendinput을 출력하려고하면
    알파벳 sendinput이 출력이안되고
    이것은 ㄴ두야ㅞㅕㅅ 이런식으로 한글로 출력해버리는데 왜이럴까요

  11. 부르르갓 2016.02.01 00:03 신고

    특정 좌표 안에서만 이미지서치하게 하는 방법은 없나요?

  12. 235 2016.02.14 00:17 신고

    감사합니다 많은 도움이 됐습니다.

  13. 예지력님최고 2016.02.15 18:16 신고

    예지력형님 정말 궁금하면서 저의 브레인 으로썬 도무지 알 수 가 없는 질문 하나만 남겨봅니다.. 답글 주셨으면 가문의 영광이겠습니다..
    텍스트 파일 맨윗줄을 불러와 어느곳에 붙여넣기하고 그 붙여넣기한 맨윗줄 하나만 삭제하는 스크립트를 짜고싶습니다
    하지만 삭제 부분에서 막혀서 답답해죽겟습니다 한줄한줄 차례로 붙여넣기는 잘되는데 붙여넣기한 맨윗줄 하나 삭제가 안됩니다..
    도와주세요 ㅠㅠ 참고로 fileread,clipboard,txt.txt 문구를 사용하였습니다

  14. 네뷸라메크로사용자 2016.02.18 13:54 신고

    오토핫키 편집프로그램 SciTE4AutoHotkey 을 다운받아서
    네뷸라 메크로를 편집하려고그러는데
    프로그램을 연후

    AdventureHeroHandler()
    {
    if(IsImagePlus(clickX, clickY, "Image\Hero\Hero.bmp", 60, 0))
    {
    if(checkHero)
    {
    Click(clickX, clickY)
    AutoStrengthenHero()
    HeroAutoSelling()
    checkHero := 0
    if(IsImagePlus(clickX, clickY, "Image\Adventure\Start.bmp", 60, 0))
    Click(clickX, clickY)
    }

    이부분을 아래처럼 추가해서

    AdventureHeroHandler()
    {
    if(IsImagePlus(clickX, clickY, "Image\Hero\Hero.bmp", 60, 0))
    {
    if(checkHero)
    {
    Click(clickX, clickY)
    if(IsImagePlus(clickX, clickY, "Image\Hero\Hero-2.bmp", 60, 0))
    {
    Click(clickX, clickY)
    AutoStrengthenHero()
    HeroAutoSelling()
    checkHero := 0
    if(IsImagePlus(clickX, clickY, "Image\Adventure\Start.bmp", 60, 0))
    Click(clickX, clickY)
    }


    이런식으로 바꾸려고하는데요

    문제는 바꿧을때 프로그램이 아예 열리지 않습니다

    찾아보니 프로그램을 정상적으로 열려면 bite수를 맞춰줘야된다고 하는데 (변환전 = 변환후)

    이쪽으로 아예 문외한이라서 어떤방식으로 접근해야되는지 전혀 모르겠네요..

  15. 2016.02.21 14:01 신고

    Error: Error opening the destination file
    이건 어떻게 해야하나요;;

  16. 송아지 2016.03.04 10:51 신고

    죄송하지만 이미지서치기능말고 텍스트 서치기능은 없나요?

  17. Dante 2016.03.15 14:15 신고

    질문 있습니다. 예를들어 몬스터 이미지를 스샷찍어서 해놓으면 그 배경까지 적용이 되는겁니까?
    사소한 바닥 균열이라던가하는 것까지 적용이 되는 것입니까?

  18. Dante 2016.03.15 14:16 신고

    그냥 몬스터 자체의 이미지만 적용이 되는 것입니까?

  19. 시몬 2017.02.25 17:59 신고

    저는 자동 물약을 만들어 볼까 하는데요 ..이미지서치로 하려면 어떻게 응용해야 될지 모르겠어요 ..
    하나가 아니라 두개니까요 .. ㅠㅠ

  20. 바다새 2017.06.20 19:40 신고

    도스 시절 foxpro하고 클리퍼라는 프로그램하고 비슷한가봐요.

  21. 빨간달팽이 2017.12.14 21:32 신고

    정말 잘 보고있고 잘 배우고있습니다.
    혹시 글 작성을 멈추신건가요? 아니면 현재 진행중인건가요?

    • BlogIcon 예지력 2017.12.14 21:33 신고

      현재 좀 바빠서 잠시 멈춘 상태입니다 ㅜ

    • 빨간달팽이 2017.12.15 03:42 신고

      아아 그렇군요!
      천천히 기다리겠습니다 ㅋㅋㅋㅋ
      오토핫키를 처음 배우고있는데 여러군데에서 정보를 얻었었는데 예지력님이 해주시는 설명이 가장 이해하기 쉽고 편해서 매일 이용하고있습니다. 화이팅이에요!

Language : AutoHotkey L

Author : jNizM

Function : 로그인창 gui 디자인

Source : http://ahkscript.org/boards/viewtopic.php?f=6&t=3851&start=20

 

Library

Lib.zip

 

 

관련 툴

 

L# 알림.zip

 

 

L# Notify.zip

 

'프로그래밍 > Archive' 카테고리의 다른 글

Animate gif GUI  (0) 2015.02.19
메모리최적화 MemoryInfo  (0) 2015.02.15
로그인 폼디자인  (0) 2015.02.05
파일,폴더 가상화 Virtualization  (14) 2015.02.03
GUI Skinning Method  (0) 2015.02.03
SkinSharp.dll - GUI 스킨  (2) 2015.02.03

 

오토핫키 스크립트 (.ahk) 파일은 오토핫키의 명령어코드가 포함된 소스코드를 말합니다.


오토핫키 설치된 컴퓨터에서는 스크립트파일을 실행할수있지만, 설치되지 않은 컴퓨터에서는 실행이 불가능합니다.

따라서 그러한 경우에는 파일의 형태를 바꾸는 과정이 필요하고


오토핫키 언어로 된 소스파일(.ahk) 을 단독 실행파일(.exe)로 바꾸는 과정이 컴파일입니다.


한번 소스코드를 작성해 실행파일로 컴파일해볼까요?

 

1. 소스파일(.ahk) 작성하기


먼저 바탕화면이나, 폴더에서 빈공간에 마우스 오른쪽 클릭후

메뉴가 나타나면, '새로 만들기' → 'AutoHotkey Scripts' 를 선택하세요.

 

 

새 AutoHotkey Script.ahk 라는 파일이 생성될것입니다. 파일을 오른쪽클릭해, 'Edit Script'를 클릭하세요.

그러면 에디터가 열리고 아래사진과 같은 소스코드를 보게됩니다.

 

 

 

간단한 메시지를 띄워보기 위하여 소스코드를 작성해보겠습니다.

5번줄 이후에 아래 명령어를 적어보세요.

 

MsgBox, 안녕하세요 

 

그리고 실행해보기 위해서 키보드 F5 또는 아래 사진에서 빨간색으로 표시된 지점을 클릭하세요.

 

 

실행결과는 아래와 같습니다.

 

 

 

2. 소스코드 컴파일

 

한번 exe파일로 만들어볼까요?

아래 사진처럼 'Compile' 을 클릭하세요. 폴더에 '새 AutoHotkey Script.exe' 가 생성됩니다.

 

  1. soolty 2015.03.12 02:06 신고

    scite4프로그램으로 script를 편집할 때, 이 블로그에 설명된 대로
    바탕화면-> 우측 클릭 ->새로 만들기 ->AutoHotkey Script
    로 스크립트를 생성 후, 다시 그 생성된 파일을 우측 클릭 -> Edit Script
    과정을 통해 에디트 할 때는 소스코드 작성 과정에 이상이 없는데,
    왜 scite4에서 직접 새 창을 열어서 소스 코드를 작성하게 되면 이상이 생기는거죠? (특히 한글을 쓰게되는 경우)

    비주얼 스튜디오 같은 경우에는 직접 프로젝트를 열고, 거기서 파일 형식을 정하게 되므로
    이것도 그런 형식이라면 에러가 나는 것을 이해할 수 있겠는데,
    이 프로그램은 목적 자체가 AutoHotkey 를 위한 건데, 그렇다면 대부분의 소스가 ***.ahk 확장자를 목적으로
    쓰여지는 게 당연할 텐데, 이 프로그램은 왜 자체적으로 새로운 소스코드를 작성할 때 오류가 생기는 건가요?

    소스파일을 만들려면 꼭 이 바탕화면 새로만들기 과정을 거쳐야 하나요? Scite4 자체적으로 다른 방법은 없을까요?
    실질적으로 제가 궁금한건 사실 이 부분입니다.

    • BlogIcon 예지력 2015.03.12 22:15 신고

      한글은 알파벳과 바이트스가 달라서 유니코드로 인코딩하셔야합니다
      Scite로 새파일 열으셨으면 File - Encoding - UTF-8 With bom 으로 저장해주세요

  2. soolty 2015.03.13 01:23 신고

    아 역시 유니코드 문제였군요. 감사합니다.

  3. EmP 2015.03.15 11:28 신고

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

  4. 사라만더 2015.04.16 02:41 신고

    잘보고 갑니다 차근차근 하나씩 배워봐야겟네요 ㅎ

  5. GG 2015.07.20 18:56 신고

    저는 오토핫키 스크립트 에딧 누르면 다른사람들처럼 오토핫키창이 안뜨고 메모장만 뜨는데 어떻게하면 다른사람과 같은 창을띄울 수 있을까요........

  6. 양능호 2015.08.24 12:09 신고

    반복메크로는 에디터실행하고 컴파일한 exe파일하고 실행속도가 차이가 크나요...
    Click과 mouseclick의 차이점 좀 알수있을까요

    • BlogIcon 예지력 2015.08.24 20:18 신고

      실행속도 차이는 없습니다.
      Click은 간단한 마우스클릭(좌)에만 사용되고 MouseClick은 오른쪽, 휠버튼 등 옵션까지 설정가능해요

 

#1. IsDebuggerPresent

 

BOOL WINAPI IsDebuggerPresent(void);

 

Return value

If the current process is running in the context of a debugger, the return value is nonzero.

If the current process is not running in the context of a debugger, the return value is zero.

 

#2. CheckRemoteDebuggerPresent

 

BOOL WINAPI CheckRemoteDebuggerPresent(
  _In_     HANDLE hProcess,
  _Inout_  PBOOL pbDebuggerPresent
);

Parameters

hProcess [in]

A handle to the process.

pbDebuggerPresent [in, out]

A pointer to a variable that the function sets to TRUE if the specified process is being debugged, or FALSE otherwise.

Return value

If the function succeeds, the return

value is nonzero.

If the function fails, the return value is zero. To get extended error information, call GetLastError.

 

#3 DebugActiveProcess


BOOL WINAPI DebugActiveProcess(
  _In_  DWORD dwProcessId
);

Parameters

dwProcessId [in]

The identifier for the process to be debugged. The debugger is granted debugging access to the process as if it created the process with the DEBUG_ONLY_THIS_PROCESS flag. For more information, see the Remarks section of this topic.

Return value

If the function succeeds, the return value is nonzero.

If the function fails, the return value is 0 (zero). To get extended error information, call GetLastError.

'프로그래밍 > C' 카테고리의 다른 글

[C++] Anti Reverse Methods  (0) 2015.02.04
[C] 기본형태, 데이터출력 방법 printf  (0) 2015.02.04

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

    한달안에 정복하고프다

printf 함수 사용예제

출력 데이터 

사용 예 

출력 결과 

문자열 

printf("Hello World"); 

Hello World 

제어 문자 

printf("Hello World\n"); 

Hello World 출력후 줄바꿈 

정수 

printf("%d", 10); 

10 

실수 

printf("%lf", 2.5); 

2.5 

수식 

printf("%d", 5 + 5);

10 

 

main 함수

- 프로그램이 시작되는곳으로, 소스에 반드시 있어야한다.

 

예제 1

/* 이 부분은 주석입니다. */

 

int main(void)

{

5 + 5;

return 0;

}

 

int main(void) 부분은 head 라 하고, { 괄호부터 } 까지를 body 라 한다.

  • - head 부분은 함수의 이름, 데이터를 표시한다
  • - body 부분은 실행코드를 적는다.

 

세미콜론 ; 을 이용해 문장의 끝을 표시한다. 생략시, 이후의 세미콜론 전까지를 한문장으로 인식하기에 오류가 날 수 있다.

 

예제 1을 컴파일하면 아무런 작동을 하지 않는다. 5 + 5 를 더할뿐, 결과로 다른 동작을 하지 않기 때문이다.

결과값을 화면으로 보기위해서 printf 함수를 이용한다.

 

예제 2

#include <stdio.h>

#include <stdlib.h>

 

int main(void)

{

printf("Hello World");

system("pause");

return 0;

}

 

실행결과 Hello World                                                  

 

printf 제어 문자 출력하기

일반 문자와 구분하기위하여 백슬래시(키보드 \)를 사용한다.

 

제어 문자

기능 

\r 

출력 위치를 줄 맨 앞으로 옮김 

\t 

출력 위치를 다음 탭(tab)으로 옮김 

\n

줄을 바꿈 

\b

출력 위치를 한 칸 뒤로 

\a 

알림을 울린다(소리) 

 

예제 3

#include <stdio.h>

 

int main(void)

{

printf("Hello\tWorld\n");

 

return 0;

}

 

실행결과 Hello    World                            

 

printf 정수와 실수 출력하기

  • - 정수는 printf("%d", 정수숫자);
  • - 실수는 printf("%lf", 실수숫자);

 

예제 4

#include <stdio.h>

 

int main(void)

{

printf("%d더하기 %d는 %d이다 \n", 10, 20, 10+20);

return 0;

}

 

실행결과 10더하기 20은 30이다.                     

'프로그래밍 > C' 카테고리의 다른 글

[C++] Anti Reverse Methods  (0) 2015.02.04
[C] 기본형태, 데이터출력 방법 printf  (0) 2015.02.04

Language: AutoHotkey L

Author : Soft ,예지력(Knowledgeisfree.tistory.com)

Function : Virtualize file, or directory, 파일이나 폴더를 가상화합니다.

 

파일인스톨이나 파일카피 등의 명령어 수행시 가상화지역을 이용합니다.

프로그램 배포시 파일인스톨로 첨부하는 리소스파일들을 깔끔하게 관리할수있겠죠?

 

Dll파일, Example Script

Virtualize.zip

 

 

DLL SourceCode

boxedappsdk__3_3_5_2.7z

'프로그래밍 > Archive' 카테고리의 다른 글

메모리최적화 MemoryInfo  (0) 2015.02.15
로그인 폼디자인  (0) 2015.02.05
파일,폴더 가상화 Virtualization  (14) 2015.02.03
GUI Skinning Method  (0) 2015.02.03
SkinSharp.dll - GUI 스킨  (2) 2015.02.03
CodeQuickTester 빠른 소스코드 테스트  (1) 2015.01.31
  1. 하룽 2015.03.05 13:47 신고

    소스파일 받아봣는데용 핫키
    Virtualize:
    hModule := DllCall("LoadLibrary", str, A_ScriptDir "\bxsdk32.dll")
    DllCall("bxsdk32\BoxedAppSDK_Init")
    DllCall("bxsdk32\BoxedAppSDK_CreateVirtualDirectoryA", AStr, A_Temp, Int, 0)
    return
    하고 시작하고 끌때
    GuiClose:
    Terminate:
    DllCall("bxsdk32\BoxedAppSDK_Exit")
    DllCall("FreeLibrary", "UInt", hModule)
    ExitApp
    return
    쓰면 되는건가요? 간단하게 키보드 x 키한개만눌르는걸로 만들어주시면 감사하겟습니다 ㅜ

    • BlogIcon 예지력 2015.03.05 21:15 신고

      시작은 코드상단에 그것을 적으면 되구요
      종료말씀하시는거라면, GuiClose 위에 X:: 쓰면 되겠네요
      핫키 강의글 하나만 읽으셔도 혼자 해결하실수있으실텐데;

  2. 오토핫키초보 2015.03.17 11:10 신고

    안녕하세요 예지력님
    Terminate이하 코드를 통한 정상적인 종료를 하지 않고 우측트레이의 오토핫키 Exit를 눌러서 강제종료해도 괜찮은지 궁금합니다

  3. 오토핫키초보 2015.03.17 13:42 신고

    하나만 더 질문드릴께요
    예지력님이 올리신 http://ahkscript.org/boards/viewtopic.php?f=6&t=5838로 문자를 암호화한 경우엔 적용이 안되는것 같은데 맞나요?

    • BlogIcon 예지력 2015.03.17 20:00 신고

      저건 텍스트파일을 암호화하는거에요, 소스코드암호화는 아니구요

  4. 오토핫키궁금이 2015.04.02 03:55 신고

    가상화를 하여 temp 폴더에 filesinstall을 하는 방법과
    그냥 fileinstall을 사용하는 방법의 차이가 어떤건가요?
    결과물은 동일하게 temp 로 파일이 복사되는 것을 확인했는데, 처음에 가상화라고 하시길래 윈도우상에서 페이지메모리라고 하나요>? 하드디스크의 용량 일부를 램으로 사용하는 것처럼, 역으로 컴퓨터의 램을 가상저장공간으로 만들어서 그곳에 파일을 저장하고 불러오는 방식인줄 알았는데...
    어쨌든 정확한 차이가 궁금합니다

  5. 오토핫키궁금이 2015.04.02 04:01 신고

    아아 ㅋㅋ 이해했습니다.
    제가 basic으로 하고있었네요 그래서 어쩐지 가상화가 제대로 작동안한다 했습니다 ㅋㅋ l은 잘되네요 감사합니다

  6. 2015.10.07 19:52

    비밀댓글입니다

  7. 오토핫키사용자 2016.05.04 18:45 신고

    안녕하세요
    좋은정보 잘쓰고있습니다..
    파일인스톨을 많이해서 용량이 700메가정도되는데요..
    속도가 많이 느려지더라고요...
    녹도를 높힐수는 없믄지 문의드립니다 ㅠㅠ

    • BlogIcon 예지력 2016.05.04 20:29 신고

      파일이 700메바나 되니 느린게 당연하기도 하죠,, SetBatchLines과 같이 오토핫키 구문해독 지연시간을 없애주는것외에 따로 파일인스톨을 빠르게 하는 방법은 없어요

  8. 왕초보 2017.05.18 16:00 신고

    좋은것을 알려주셔서 감사합니다..
    너무 간단해서 오히려 놀랐습니다..적용도 아주 잘됩니다..잘 사용하겠습니다

    조금 아쉬운 부분이 있다면...다른 파일은 다 안보이게 되지만..bxsdk32.dll 만큼은..어디에 풀기는 하여야 하네요..
    이 dll만 안보이게 하면..완전할것 같습니다...
    초보가 너무 상상을 나래를 편것 같습니다..

  9. 매크러 2017.08.21 15:53 신고

    윈도우10은 지원이 안되는지 이미지 파일이 그래도 temp폴더에 설치되네요 ㅎㅎ
    윈도우 10은 적용법이 다른것 같은데 혹시 알고 계신가요?

Language : AutoHotkey L

Author : Soft , 예지력(knowledgeisfree.tistory.com)

Function : GUI Skinning Method

 

Lib

SkinSharp Editor&Bin.zip

SkinSharp AHK.zip

 

#2 SkinSharp

더보기

'프로그래밍 > Archive' 카테고리의 다른 글

로그인 폼디자인  (0) 2015.02.05
파일,폴더 가상화 Virtualization  (14) 2015.02.03
GUI Skinning Method  (0) 2015.02.03
SkinSharp.dll - GUI 스킨  (2) 2015.02.03
CodeQuickTester 빠른 소스코드 테스트  (1) 2015.01.31
Class_CustomFont - Load font from font file  (0) 2015.01.24

+ Recent posts