âÀ» ½±°Ô ²ô´Â ¹æ¹ý -- 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