창을 쉽게 끄는 방법 -- KDE 스타일 (XP/2k/NT 요구) -- by Jonny

이 스크립트는 훨씬 더 쉽게 창을 이동하거나 크기를 변경할 수 있도록 만들어 줍니다: 1) 창 안 아무데나 ALT 키와 LEFT-클릭을 누르고 창을 새 위치로 끌 수 있습니다; 2) 창 안 아무 곳이나 ALT와 RIGHT-클릭으로 끌어서 쉽게 크기를 변경할 수 있습니다; 3) ALT를 두 번, 그러나 두 번째를 놓기 전에, 왼클릭하면 마우스 커서 아래의 창을 최소화하고 우클릭하거나 또는 가운데 클릭하면 창을 닫을 수 있습니다.

이 스크립트 내려받기  |  다른 샘플 스크립트  |  홈으로

; 이 스크립트는 포럼에 있는 많은 분들로부터
; 영감을 얻어 작성되었습니다. 훌륭한 작품을 공개해 주신 ck, thinkstorm, Chris,
; 그리고 aurelian에게 감사의 말씀을 전합니다.

; 변경 이력:
; November 07, 2006: !RButton에서 크기 조절 코드 최적화, bluedawn 제공.
; February 05, 2006: 더블-alt (~Alt 핫키)가 최신 버전의 AHK에서 작동하도록 수정.

; 더블D-Alt 수식키는 알트 키를 두 번 누르면 활성화 됩니다.
; 더블 클릭과 많이 닮았습니다.
; 두 번째 알트 키는 클릭할 때까지 누르고 계십시오.
;
; 단축키:
;  Alt + Left Button  : 끌어 창을 이동.
;  Alt + Right Button : 끌어 창 크기를 변경.
;  Double-Alt + Left Button   : 창 최소화.
;  Double-Alt + Right Button  : 창 최대화/복구.
;  Double-Alt + Middle Button : 창 닫기.
;
; 선택적으로 첫 번째 클릭 다음에 알트 키를 놓을 수 있습니다.
; 계속 누르고 있을 필요가 없습니다.

If (A_AhkVersion < "1.0.39.00")
{
    MsgBox,20,,이 스크립트는 현재의 오토핫키 버전에서 제대로 작동하지 않을 가능성이 있습니다. 계속할까요?
    IfMsgBox,No
    ExitApp
}


; 다음은 필자의 시스템에서 가장 부드럽게 작동하는 설정입니다
; 여러분의 비디오 카드와 시피유 성능에 따라
; 이 값을 올리거나 내리면 됩니다.
SetWinDelay,2

CoordMode,Mouse
return

!LButton::
If DoubleAlt
{
    MouseGetPos,,,KDE_id
    ; 이 메시지는 거의 WinMinimize와 동등하지만,
    ; PSPad의 버그를 피합니다.
    PostMessage,0x112,0xf020,,,ahk_id %KDE_id%
    DoubleAlt := false
    return
}
; 최초의 마우스 위치와 창 아이디를 얻습니다. 
; 창이 최대화되어 있다면 취소합니다.
MouseGetPos,KDE_X1,KDE_Y1,KDE_id
WinGet,KDE_Win,MinMax,ahk_id %KDE_id%
If KDE_Win
    return
; 최초의 창 위치를 얻습니다.
WinGetPos,KDE_WinX1,KDE_WinY1,,,ahk_id %KDE_id%
Loop
{
    GetKeyState,KDE_Button,LButton,P ; 버튼을 놓았다면 빠져 나갑니다.
    If KDE_Button = U
        break
    MouseGetPos,KDE_X2,KDE_Y2 ; 현재 마우스 위치를 얻습니다.
    KDE_X2 -= KDE_X1 ; 최초 마우스 위치로부터 상대거리(offset)를 얻습니다.
    KDE_Y2 -= KDE_Y1
    KDE_WinX2 := (KDE_WinX1 + KDE_X2) ; 이 상대거리를 창위 위치에 적용합니다.
    KDE_WinY2 := (KDE_WinY1 + KDE_Y2)
    WinMove,ahk_id %KDE_id%,,%KDE_WinX2%,%KDE_WinY2% ; 창을 새 위치로 이동시킵니다.
}
return

!RButton::
If DoubleAlt
{
    MouseGetPos,,,KDE_id
    ; 최대화 상태와 복구 상태 사이를 토글합니다.
    WinGet,KDE_Win,MinMax,ahk_id %KDE_id%
    If KDE_Win
        WinRestore,ahk_id %KDE_id%
    Else
        WinMaximize,ahk_id %KDE_id%
    DoubleAlt := false
    return
}
; 최초 마우스 위치와 창 아이디를 얻습니다.
; 창이 최대화 되어 있다면 취소합니다.
MouseGetPos,KDE_X1,KDE_Y1,KDE_id
WinGet,KDE_Win,MinMax,ahk_id %KDE_id%
If KDE_Win
    return
; 최초 창의 위치와 크기를 얻습니다.
WinGetPos,KDE_WinX1,KDE_WinY1,KDE_WinW,KDE_WinH,ahk_id %KDE_id%
; 현재 마우스가 있는 창 구역을 정의합니다.
; 네 구역은  좌상, 우상, 좌하, 우하입니다.
If (KDE_X1 < KDE_WinX1 + KDE_WinW / 2)
   KDE_WinLeft := 1
Else
   KDE_WinLeft := -1
If (KDE_Y1 < KDE_WinY1 + KDE_WinH / 2)
   KDE_WinUp := 1
Else
   KDE_WinUp := -1
Loop
{
    GetKeyState,KDE_Button,RButton,P ; 버튼이 눌려 있으면 빠져 나갑니다.
    If KDE_Button = U
        break
    MouseGetPos,KDE_X2,KDE_Y2 ; 현재 마우스 위치를 얻습니다.
    ; 현재 창의 위치와 크기를 얻습니다.
    WinGetPos,KDE_WinX1,KDE_WinY1,KDE_WinW,KDE_WinH,ahk_id %KDE_id%
    KDE_X2 -= KDE_X1 ; 최초 마우스 위치로부터 상대거리(offset)를 얻습니다.
    KDE_Y2 -= KDE_Y1
    ; 이제, 정의된 구역에 맞게 행위합니다.
    WinMove,ahk_id %KDE_id%,, KDE_WinX1 + (KDE_WinLeft+1)/2*KDE_X2  ; 크기 변경된 창의 X
                            , KDE_WinY1 +   (KDE_WinUp+1)/2*KDE_Y2  ; 크기 변경된 창의 Y
                            , KDE_WinW  -     KDE_WinLeft  *KDE_X2  ; 크기 변경된 창의 W
                            , KDE_WinH  -       KDE_WinUp  *KDE_Y2  ; 크기 변경된 창의 H
    KDE_X1 := (KDE_X2 + KDE_X1) ; 다음 반복을 위해 최초 위치로 리셋합니다.
    KDE_Y1 := (KDE_Y2 + KDE_Y1)
}
return

; "Alt + MButton"이 더 간단할 수 있지만,
; 필자는 다음과 같이 연산에
; 보안을 추가하는 것을 좋아합니다.
!MButton::
If DoubleAlt
{
    MouseGetPos,,,KDE_id
    WinClose,ahk_id %KDE_id%
    DoubleAlt := false
    return
}
return

; 다음은 알트 키의 "더블-클릭"을 탐지합니다.
~Alt::
DoubleAlt := A_PriorHotKey = "~Alt" AND A_TimeSincePriorHotkey < 400
Sleep 0
KeyWait Alt  ; 이렇게 하면 키보드의 자동 반복 특징 때문에 방해 받지 않습니다.
return
선택 | 내려받기