[컴][툴] autohotkey 예시들

유용한 매크로 / macro / exmples / dictionary / dict /dic / auto hot key / hotkey

autohotkey 예시들

always on top


; always on top 기능
; Ctrl + Shift + T 를 누르면 작동
; 휠로 투명도 조절

^+t::
{
    if not A_IsAdmin
    {
        Run('*RunAs ""on-top-always.ahk""')
        ExitApp()
    }

    ; 현재 활성화된 창의 ID(고유값)를 가져옵니다.
    activeWin := WinExist("A")
    
    if activeWin
    {
        ; 1. 항상 위(Always on Top) 상태를 토글(반전)합니다.
        WinSetAlwaysOnTop(-1, activeWin) ; -1은 토글(Toggle)을 의미합니다.

        isAlwaysOnTop := IsWinAlwaysOnTop(activeWin)
        
        ; 3. 항상 위가 ON일 때만 투명도를 세팅하고, OFF면 투명도를 끕니다.
        if (isAlwaysOnTop)
        {
            ; 투명도 : 0~255 단계, 낮을수록 투명
            WinSetTransparent(230, activeWin) ; ON 일 때 투명도 100 설정
        }
        else
        {
            WinSetTransparent("Off", activeWin) ; OFF 일 때 투명도 해제
        }
    }
}


; ==========================================
; 2. 항상 위 창 투명도 수동 조절 (Ctrl + Shift + 마우스 휠)
; ==========================================

; [ctrl+shift+휠 업] 투명도를 높여서 더 선명하게 (최대 255)
^+WheelUp::
{
    activeWin := WinExist("A")
    if activeWin && IsWinAlwaysOnTop(activeWin)
    {
        currentTrans := WinGetTransparent(activeWin)
        ; 투명도 값이 없으면 기본값인 255(불투명)로 처리
        if (currentTrans = "") 
            currentTrans := 255
            
        ; 현재 투명도에서 15만큼 증가 (최대 255까지만)
        newTrans := Min(currentTrans + 15, 255)
        WinSetTransparent(newTrans, activeWin)
    }
}

; [ctrl+shift+휠 다운] 투명도를 낮춰서 더 투명하게 (최소 30)
^+WheelDown::
{
    activeWin := WinExist("A")
    if activeWin && IsWinAlwaysOnTop(activeWin)
    {
        currentTrans := WinGetTransparent(activeWin)
        if (currentTrans = "") 
            currentTrans := 255
            
        ; 현재 투명도에서 15만큼 감소 (너무 투명해서 사라지지 않게 최소 30 유지)
        newTrans := Max(currentTrans - 15, 30)
        WinSetTransparent(newTrans, activeWin)
    }
}

; ==========================================
; [도움 함수] 해당 창이 '항상 위' 상태인지 판별
; ==========================================
IsWinAlwaysOnTop(hwnd) {
    ; 토글 직후, 창의 확장 스타일(ExStyle)을 가져옵니다.
    exStyle := WinGetExStyle(hwnd)
        
    ; 0x8은 WS_EX_TOPMOST (항상 위) 속성을 의미하는 16진수 값입니다.
    ; 비트 연산(&)을 통해 현재 항상 위가 'ON' 상태인지 확인합니다.
    exStyle := WinGetExStyle(hwnd)
    return exStyle & 0x8
}

double click 감지

; from : https://www.autohotkey.com/docs/commands/KeyWait.htm#ExDouble
; 마우스왼쪽버튼(Lbutton) 을 누르면, 매크로가 시작된다.
; 이전에 눌렸던 키가 Lbutton 이면서 400초 이내에 눌렀으면
; MsgBox 를 보여준다.
; 그렇지 않은 경우에는 그냥 Lbutton 이 눌렸다는 event 를 보내준다.

Lbutton::
if (A_PriorHotkey != "Lbutton" or A_TimeSincePriorHotkey > 400)
{
    ; 그냥 Lbutton 전송
    mouseclick, left
    return
}
; 더블클릭 인식
Send !tab
return

텍스트복사 후 붙여넣기

; 마우스 가운데 버튼을 누르면 현재 텍스트를 복사하고, firefox 로 붙여넣기 한다.

SendKey2FF(key)
{

    If WinActive("ahk_class MozillaWindowClass")
    {
        Send %key%
        return true
    }
    return false
}

Mbutton::
Send ^c  ; ctrl+c
Send !{Tab}
Sleep, 500
ret := SendKey2FF("^v{enter}")  ;key 를 보내고, 사용
Send !{Tab}
return

1초마다 현재 좌표를 툴팁으로 알림

; ref: https://autohotkey.com/board/topic/75360-how-to-know-the-x-y-coordinate-of-my-screen/
; 함수를 사용
; 계속 떠 있으면서, 1초마다 현재 내 좌표를 툴팁(tooltip)으로 알려준다.

#singleinstance force
#Persistent

SeeCursorCoord()
{
    MouseGetPos, xpos, ypos 
    ToolTip, xpos: %xpos%`nypos: %ypos%
}

SetTimer, SeeCursorCoord, 1000

버튼 누르면, 이전 창에 붙여넣기

; text 를 선택하고, 마우스 가운데 버튼을 누르면, 
; alt+tab 을 하고 '붙여넣기' 를 하고, 다시 alt+tab 을 한다.
; First macro

SendKey2FF(key)
{

    If WinActive("ahk_class MozillaWindowClass")
    {
        Send %key%
        return true
    }
    return false
}

Test(a)
{
    return "test"
}


Mbutton::
Send ^c  ; ctrl+c
Send !{Tab}
Sleep, 500
ret := SendKey2FF("^v{enter}")  ;key 를 보내고, 사용
Send !{Tab}
return

텔레그램에서 클릭시 특정위치로 forward

; 텔레그램에서 마우스 '휠버튼' 누르면, 특정 위치로 forward(전달) 을 함

#Requires AutoHotkey v2
#SingleInstance Force


;================================================================================
; ★★★ 필수 설정 값 (사용자 환경에 맞게 반드시 수정해야 합니다!) ★★★
; Window Spy로 전달 팝업의 크기 및 '보내기' 버튼의 상대 위치를 확인하세요.
;--------------------------------------------------------------------------------
POPUP_W := 365      ; 전달 팝업 창의 예상 너비 (픽셀)
POPUP_H := 590      ; 전달 팝업 창의 예상 높이 (픽셀)

SEND_REL_X := 300   ; 팝업 창의 왼쪽 상단(0,0) 기준 '보내기' 버튼의 상대 X 좌표
SEND_REL_Y := 570   ; 팝업 창의 왼쪽 상단(0,0) 기준 '보내기' 버튼의 상대 Y 좌표

; SEND_REL_X := 714  ; '보내기' 버튼의 상대 X 좌표 (예시 값)
; SEND_REL_Y := 831   ; '보내기' 버튼의 상대 Y 좌표 (예시 값)
;================================================================================

SearchTarget := "저장한 메시지"

F1::
{
    ; 1. 메시지를 클릭하여 '전달' 팝업을 띄웁니다.
    Click 
    Sleep 500
    
    ; 2. 팝업 창에서 '투노'를 입력하고 엔터를 누릅니다.

    Send SearchTarget "{Enter}"
    Sleep 500
    
    ; --- 상대 좌표 설정 및 클릭 시작 ---
    
    ; 텔레그램 전달 팝업 창의 제목 또는 Class를 확인하여 변수에 저장합니다.
    ; (대부분의 텔레그램 팝업은 메인 창과 동일한 Class를 사용합니다.)
    ; 텔레그램 창 활성화 및 확인
    TelegramWindow := "ahk_exe Telegram.exe"

    WinActivate TelegramWindow
    if !WinExist(TelegramWindow) {
        ToolTip "오류: 텔레그램 창을 찾을 수 없습니다."
        Sleep 1500
        ToolTip
        return
    }

    ; 2. 텔레그램 메인 창의 위치와 크기를 가져옵니다.
    ; Main_X, Main_Y: 메인 창의 절대 시작 좌표
    WinGetPos &Main_X, &Main_Y, &Main_W, &Main_H, TelegramWindow
    
    ; 3. 팝업 창의 절대 시작 좌표를 계산합니다. (메인 윈도우 중앙 정렬)
    ; 팝업 시작 X = 메인 시작 X + (메인 너비 / 2) - (팝업 너비 / 2)
    Popup_Abs_X := Floor(Main_W / 2) - Floor(POPUP_W / 2)
    ; 팝업 시작 Y = 메인 시작 Y + (메인 높이 / 2) - (팝업 높이 / 2)
    Popup_Abs_Y := Floor(Main_H / 2) - Floor(POPUP_H / 2)
    
    ; 5. '보내기' 버튼의 최종 절대 좌표를 계산합니다.
    ; 버튼 절대 X = 팝업 시작 절대 X + 팝업 내 버튼 상대 X
    Send_Abs_X := Popup_Abs_X + SEND_REL_X
    ; 버튼 절대 Y = 팝업 시작 절대 Y + 팝업 내 버튼 상대 Y
    Send_Abs_Y := Popup_Abs_Y + SEND_REL_Y
    
    ; Debug
    ; 마우스를 계산된 좌표로 이동시킵니다.
    ; MouseMove Send_Abs_X, Send_Abs_Y
    ; 2초 동안 마우스를 멈춰서 사용자가 위치를 확인하게 합니다.
    ; Sleep 2000
    

    ; 6. 계산된 최종 절대 좌표를 클릭합니다.
    Click Send_Abs_X, Send_Abs_Y
    
    ; --- 상대 좌표 설정 복원 (선택 사항) ---
    ; 다음 스크립트 실행에 영향을 주지 않도록 원래 모드로 되돌립니다.
    CoordMode "Mouse", "Screen"
    
    ; 작업 완료 메시지
    ToolTip "전달 자동화 완료 (F1) - 상대 좌표 사용"
    
    Sleep 1500
    ToolTip 
}
return

See Also

  1. keyboard 로 열려있는 app navigation

Reference

  1. Functions - Definition & Usage | AutoHotkey

댓글 없음:

댓글 쓰기