창을 쉽게 끄는 방법 -- 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