반복적인 작업을 줄여주는 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를 이용하여 자동화하여 다른 의미 있는 것에 더 많은 시간을 쓸 수 있도록 하시기 바랍니다.

반복적인 작업을 줄여주는 AutoHotKey”에 대한 4개의 생각

  1. 이남자

    안녕하세요.
    우연히 구글링 중 터프맨님의 블로그를 방문하게 되었습니다.
    위의 스크립트 중 첫번째 내용을 한 번 해보고 싶어서 복사하여 붙이고 리로드를 실행해보니
    아래와 같은 메시지가 뜨는군요.

    Error at line 13.

    Line Text: ;lt;
    Error: The leftmost character above is illegal in an expression.

    The script was not reloaded; the old version will remain in effect.

    어떠한 내용에서 이런 것인지 잘몰라서 한번 문의 드려봅니다.

    응답
    1. Toughman 글쓴이

      안녕하세요?
      제 블로그에 방문해 주셔서 감사합니다.

      말씀해 주신 것을 확인해 보았습니다. 글 작성시 소스를 붙여 넣었는데 부등호가 다른 문자로 치환되었습니다.
      현재는 원래의 소스가 출력되도록 수정해 두었습니다. 다시 복사하셔서 실행해 보시면 정상적으로 되실겁니다.

      응답
  2. Rabbit

    안녕하세요 복사하기 버튼 사용해보려고 하는데요 모니터 갯수와 해상도에 맞게 변경하라고 쓰셨는데 어느 부분을 변경해야되는건가요?

    1920 x 1080 모니터를 듀얼로 사용하고 있습니다.
    왼쪽 위 끝점을 0,0 이고 오른쪽 끝점은 3839,1079 입니다.
    어느부분을 변경해야되는지 몰라서 여쭤봅니다 ㅠ

    응답
    1. Toughman 글쓴이

      안녕하세요?
      예를 들어드린 코드는 모니터 세개 기준입니다. 가운데(1920×1080)가 메인, 좌측(1280*1024), 우측(1920×1080) 기준이었습니다.
      사용하시는 모니터 설정에 따라 다를 수 있을 것 같습니다.
      MouseGetPos x2 아래 if ((x1 <= -1 and x1 >= -1280) … 이 부분을 사용하시는 환경에 맞게 수정하시면 됩니다.
      좌측 모니터를 메인으로 설정하셨다면 위 if… 조건이 필요없을 것 같습니다.
      우측 모니터를 메인으로 설정하셨다면 좌측 모니터의 좌표가 음수가 될 것입니다.
      MsgBox 를 사용하셔서 실제 클릭된 좌표를 확인하시고 수정하시면 됩니다.

      응답

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

Time limit is exhausted. Please reload the CAPTCHA.