태그 보관물: AutoHotKey

반복적인 작업을 줄여주는 AutoHotKey

AutoHotKey 는 하나의 프로그램이지만 사용할 수 있는 범위가 무척 다양합니다. 단축키를 지정하여 키가 눌려지면 여러가지 동작을 할 수 있도록 해 주는 프로그램 입니다. 다음의 링크에서 다운로드 받을 수 있습니다.

https://autohotkey.com/

포럼도 활성화 되어 있어 많은 정보를 얻을 수 있습니다. 스크립트 기반으로 되어 있어서 처음에는 익숙하지 않을 수도 있습니다. 하지만 잘 살펴보고 필요한 것을 위해 변경하다 보면 그리 어렵지 않습니다. 스크립트 작성하는 방법과 예제는 홈페이지를 참조하시면 됩니다.

여러 용도가 있지만 필자는 주로 작업시에 시간을 줄이는데 사용하고 있습니다. 몇 가지 소개해 보겠습니다.

  1. 마우스 드래그하면 자동으로 클립보드에 복사하기
    텍스트 에디터나 IDE 에서 작업을 하다보면 복사(Ctrl+C)와 붙여넣기(Ctrl+V)를 많이 실행하게 됩니다. 마우스를 드래그하여 글자를 선택하면 많은 경우 복사로 이어지게 됩니다. 그래서 마우스를 드래그 하면 자동으로 클립보드에 복사 되도록 하였습니다. 동작방식은 마우스 버튼을 클릭하면 좌표를 저장하고 버튼에서 손가락을 떼었을 때 좌표를 가져와서 서로 비교하여 지정된 길이 이상 차이가 나면 Ctrl+C 가 눌린 것처럼 하는 것 입니다. 무조건 이렇게 할 수도 있고 특정한 프로그램에서만 되도록 할 수 있습니다. 주의할 것은 여러개의 모니터를 사용하는 경우 메인 모니터를 기준으로 하기 때문에 보조 모니터는 좌표가 음수로 나타날 수 있습니다. 아래는 스크립트 입니다.

    ~LButton:: MouseGetPos x1,,win
    
    ~LButton Up::
    SetTitleMatchMode, 2
    TitleList = WordPad,Notepad,Word,AkelPad,Notepad++,UltraEdit,Visual Studio,Chrome,Java,SQL ;프로그램 제목
    Loop parse, TitleList, CSV
    GroupAdd Editors, %A_LoopField%
    
    IfWinActive ahk_group Editors
    {
        ;모니터의 개수와 해상도에 맞게 변경
        MouseGetPos x2	
        if ((x1 <= -1 and x1 >= -1280) and (x2 <= -1 and x2 >= -1280)) or ((x1 <= 1920 and x1 >= 1) and (x2 <= 1920 and x2 >= 1)) or ((x1 <= 3968 and x1 >= 1921) and (x2 <= 3968 and x2 >= 1921))
            if  (x2 - x1) < -30 or (x2 - x1) > 30
    			Send ^c ;Ctrl+C 전송
       return 
    }
    else
    {
       return
    }
    
  2. 마우스 가운데 버튼을 클릭하면 붙여넣기가 되도록 설정
    마우스 가운데 버튼을 클릭하는 경우가 거의 없어서 필자는 붙여넣기가 되도록 하였습니다. Ctrl+V 를 누르는 것보다 시간이 절약됩니다.

    ~Mbutton:: ;마우스 가운데 버튼
    	Send, ^v ;Ctrl+V 전송
    return
    
  3. 특정한 키를 누르면 현재일시가 타이핑되도록 설정
    필자는 파일을 만들거나 자료를 정리할 때 그리고 백업을 할때 일시를 뒤쪽에 붙여서 구별이 쉽게합니다. AutoHotKey 를 이용하지 않을때는 시계를 보고 입력 했었는데 이제는 자동화하였습니다. 생각보다 시간이 많이 절약됩니다. IME_CHECK 함수가 현재 입력기(IME) 모드의 정보를 가져옵니다. Ctrl+Alt+C 키를 누르면 -20170218103640 와 같은 형식으로 직접 입력한 것처럼 입력해 줍니다.

    ^!c:: ;Ctrl+Alt+C 키가 눌렸을때
    ret := IME_CHECK("A") ;키보드 입력상태
    
    if %ret% = 0 ;영문
    {
    	SendInput, -%A_YYYY%%A_MM%%A_DD%%A_Hour%%A_Min%%A_Sec%
    }
    else ;영문이 아니면
    {
    	Send, {vk15sc138} ;한영전환
    	SendInput, -%A_YYYY%%A_MM%%A_DD%%A_Hour%%A_Min%%A_Sec%
    	Send, {vk15sc138} ;한영전환
    }
    return
    
    IME_CHECK(WinTitle)
    {
        WinGet,hWnd,ID,%WinTitle%
        Return Send_ImeControl(ImmGetDefaultIMEWnd(hWnd),0x005,"")
    }
    
  4. 프로그램 실행
    단순 실행은 윈도우 자체로도 가능합니다. 하지만 더 복잡한 동작을 지정할 수 없습니다. AutoHotKey 를 이용하면 더 유연하게 프로그램을 실행할 수 있습니다. 예를 들어 복사된 텍스트로 구글 검색을 하고 싶다거나 영어사전에서 찾아보고 싶은 때가 있습니다. 그럴 때 유용하게 사용할 수 있습니다.

    #g:: Run, http://www.google.com/search?q=%Clipboard% Return ;윈도우키+G 클립보드에 있는 텍스트로 구글검색
    #n:: Run, http://endic.naver.com/search.nhn?sLn=kr&dicQuery=%Clipboard%&x=20&y=16&query=%Clipboard%&target=endic&ie=utf8&query_utf=&isOnlyViewEE=N Return ;윈도우키+N 클립보드에 있는 텍스트로 사전검색
    

이 글에서는 아주 일부의 예만 제시 하였습니다. 평소 반복적이고 시간이 많이 소요되는 작업이 있다면 AutoHotKey를 이용하여 자동화하여 다른 의미 있는 것에 더 많은 시간을 쓸 수 있도록 하시기 바랍니다.