/*
*клавиши задающие направления:
numpadup, numpaddown, numpadleft, numpadright
клавиши задающие вид действия:
lalt+lwin+lbutton - скрытие/отображение окна (с иконой в трее)
lalt+lbutton - движение контрола
ralt+rctrl+* - движение контрола**
rwin+rctrl+* - ресайз контрола**
ralt+mbutton - раз/блокировка контрола
ralt+mbutton(x2) - скрытие/отображение контрола
ralt+wu/wd - прозрачность окна**
ralt+appskey+* - ресайз окна**
ralt+rshift - сохранение значений
ralt/rwin+numpadclear - восстановление значений**
пункты меню:
переключение отображения окна**
скрытие/отображение окна**
tilde+esc - закрытие скрипта
**требуется сохранение значений окна
*/
#NoEnv
#UseHook
#WinActivateForce
SetBatchLines, -1
DetectHiddenWindows, On
Value:=5, TransValue:=255
Menu, Tray, NoStandard
Menu, Tray, Tip, Test
Menu, Tray, Add, &AOT stored window, AOTWindow
Menu, Tray, Add, &Hide stored window, ToggleVWindow
Menu, Tray, Add
Menu, Tray, Add, &Exit (Tilde+Esc), ExitScript
OnMessage(0x401, "WM_LBUTTONUP")
SetTimer, ChaseCursor, 100
Hotkey, *NumpadUp, Action
Hotkey, *NumpadDown, Action
Hotkey, *NumpadLeft, Action
Hotkey, *NumpadRight, Action
Hotkey, *NumpadClear, Action
Hotkey, RAlt & WheelUp, Action2
Hotkey, RAlt & WheelDown, Action2
Hotkey, RAlt & LButton, Action3
Hotkey, vkC0 & Esc, ExitScript
~*LButton::Goto, Action
ChaseCursor:
CoordMode, Mouse
MouseGetPos, XPosA, YPosA
CoordMode, Mouse, Relative
MouseGetPos, XPosR, YPosR, WinID, WinCtrl
WinGetTitle, WinTitle, % "ahk_id"WinID
WinGetPos, WinX, WinY, WinW, WinH, % "ahk_id"WinID
ControlGetPos, CtrlX, CtrlY, CtrlW
, CtrlH, % WinCtrl, % "ahk_id"WinID
; CurrentInfo()
If GetKeyState("RAlt", "P") And GetKeyState("RShift", "P")
{
If IsInvisible
{
TrayTip,, hidden window must be visible
Return
}
StoreInfo(), Message("stored", "stored size")
}
Return
Action:
If GetKeyState("Alt", "P") Or GetKeyState("RWin", "P")
{
If GetKeyState("RAlt", "P") And GetKeyState("RCtrl", "P")
{
If SubStr(A_ThisHotkey, 2)="NumpadUp"
CtrlMove(CtrlXC, CtrlYC-=Value
, CtrlWC, CtrlHC, "Y", "-", CtrlYC)
Else If SubStr(A_ThisHotkey, 2)="NumpadDown"
CtrlMove(CtrlXC, CtrlYC+=Value
, CtrlWC, CtrlHC, "Y", "+", CtrlYC)
Else If SubStr(A_ThisHotkey, 2)="NumpadLeft"
CtrlMove(CtrlXC-=Value, CtrlYC
, CtrlWC, CtrlHC, "X", "-", CtrlXC)
Else If SubStr(A_ThisHotkey, 2)="NumpadRight"
CtrlMove(CtrlXC+=Value, CtrlYC
, CtrlWC, CtrlHC, "X", "+", CtrlXC)
}
Else If GetKeyState("RWin", "P") And GetKeyState("RCtrl", "P")
{
If SubStr(A_ThisHotkey, 2)="NumpadUp"
CtrlMove(CtrlXC, CtrlYC
, CtrlWC, CtrlHC-=Value, "H", "-", CtrlHC)
Else If SubStr(A_ThisHotkey, 2)="NumpadDown"
CtrlMove(CtrlXC, CtrlYC
, CtrlWC, CtrlHC+=Value, "H", "+", CtrlHC)
Else If SubStr(A_ThisHotkey, 2)="NumpadLeft"
CtrlMove(CtrlXC, CtrlYC
, CtrlWC-=Value, CtrlHC, "W", "-", CtrlWC)
Else If SubStr(A_ThisHotkey, 2)="NumpadRight"
CtrlMove(CtrlXC, CtrlYC
, CtrlWC+=Value, CtrlHC, "W", "+", CtrlWC)
}
Else If GetKeyState("AppsKey", "P")
{
If SubStr(A_ThisHotkey, 2)="NumpadUp"
WinResize(WinWC, WinHC-=Value)
Else If SubStr(A_ThisHotkey, 2)="NumpadDown"
WinResize(WinWC, WinHC+=Value)
Else If SubStr(A_ThisHotkey, 2)="NumpadLeft"
WinResize(WinWC-=Value, WinHC)
Else If SubStr(A_ThisHotkey, 2)="NumpadRight"
WinResize(WinWC+=Value, WinHC)
}
Else If GetKeyState("RAlt", "P") And GetKeyState("NumpadClear", "P")
Or GetKeyState("RWin", "P") And GetKeyState("NumpadClear", "P")
{
If !WinTitleS
{
TrayTip,, stored window is not found!
Return
}
Else BackInfo()
}
Else If GetKeyState("LAlt", "P") And !GetKeyState("LWin", "P")
{
If IsInvisible
{
TrayTip,, hidden window must be visible!!!
Return
}
StoreInfo()
While GetKeyState("LButton", "P")
{
ControlMove, % WinCtrlS, XPosR-CtrlW/2, YPosR-CtrlH/2
,,, % "ahk_id"WinIDS
TrayTip,, % " control: "WinCtrlS
. "`nx: "CtrlX ", y: "CtrlY
WinSet, Redraw,, % "ahk_id"WinID
Sleep, 100
}
BackInfo()
}
Else If GetKeyState("LWin", "P") And !IsUsed
{
WinTitleT:=WinTitle, WinIDT:=WinID, IsUsed:=True
WinGet, ProcPath, ProcessPath, % "ahk_id"WinIDT
WinHide, % "ahk_id"WinIDT
hIcon:=DllCall("Shell32.dll\ExtractAssociatedIcon", Int, 0
, Str, ProcPath
, "Ptr*", 0)
TrayIcon(A_ScriptHwnd, 1, 0x401, hIcon, WinTitleT, 0)
}
}
Else Send, % "{"SubStr(A_ThisHotkey, 2)" Down}"
KeyWait, % A_ThisHotkey
If GetKeyState("Alt", "P") Or GetKeyState("RWin", "P")
Return
Else Send, % "{"SubStr(A_ThisHotkey, 2)" Up}"
Return
Action2:
Hotkey, % A_ThisHotkey, WBlock, On
If (WinIDSV!=WinIDS Or IsInvisible)
{
If IsInvisible
{
TrayTip,, hidden window must be visible
Sleep, 50
Hotkey, % A_ThisHotkey, Action2, On
Return
}
WinSet, Trans, % TransValue:=255, % "ahk_id"WinIDSV
WinIDSV:=""
}
WinActivate, % "ahk_id"WinIDS
TTransValue:=A_ThisHotkey="RAlt & WheelUp" ? 255:0
If (TransValue=TTransValue Or !WinIDS)
{
If !WinIDS
TrayTip,, stored window is not found!
Sleep, 50
Hotkey, % A_ThisHotkey, Action2, On
Return
}
TransValue.=A_ThisHotkey="RAlt & WheelUp" ? +=15:-=15
WinSet, Trans, % TransValue, % "ahk_id"WinIDS
Str:="", WinIDSV:=WinIDS
If TransValue=255
Str:=" (opaque)"
Else If TransValue=0
Str:=" (transparent)"
TrayTip,, % "transparency: "TransValue . Str
Sleep, 50
Hotkey, % A_ThisHotkey, Action2, On
WBlock:
Return
Action3:
KeyWait, LButton
Itr++
SetTimer, Counter, -250
Return
Counter:
If Itr=1
SetTimer, ActionBySClick, -0
Else If Itr=2
SetTimer, ActionByDClick, -0
Itr:=""
Return
ActionBySClick:
ControlGet, CCheck, Enabled,, % WinCtrl, % "ahk_id"WinID
Control, % CCheck ? "Disable":"Enable",, % WinCtrl, % "ahk_id"WinID
WinSet, Redraw,, % "ahk_id"WinID
TrayTip,, % "control: "WinCtrl . (CCheck ? "`ndisable":"`nenable")
Return
ActionByDClick:
If !CtrlHidden
WinCtrlV:=WinCtrl, WinIDV:=WinID
WinActivate, % "ahk_id"WinIDV
Control, % !CtrlHidden ? "Hide":"Show",, % WinCtrlV, % "ahk_id"WinIDV
WinSet, Redraw,, % "ahk_id"WinID
TrayTip,, % "control: "WinCtrlV . (!CtrlHidden ? "`nhidden":"`nvisible")
CtrlHidden:=!CtrlHidden
Return
ToggleVWindow:
If (!WinIDS Or WinIDT=WinIDS)
{
TrayTip,, % "stored window "
. (!WinIDS ? "is not found!"
: "has already hidden!")
Return
}
If !IsInvisible
WinHide, % "ahk_id"WinIDS
Else
WinShow, % "ahk_id"WinIDS
Menu, Tray, Rename, % (!IsInvisible ? "&Hide"
: "&Show") . " stored window"
, % (!IsInvisible ? "&Show"
: "&Hide") . " stored window"
IsInvisible:=!IsInvisible
Return
AOTWindow:
If !WinIDS
{
TrayTip,, stored window is not found!
Return
}
WinSet, AlwaysOnTop, Toggle, % "ahk_id"WinIDS
WinGet, IsExStyle, ExStyle, % "ahk_id"WinIDS
TrayTip,, % IsExStyle&8 ? "stored window is" . "`n always on top"
: " stored window is" . "`nnot always on top"
Menu, Tray, % IsExStyle&8 ? "Check":"Uncheck"
, &AOT stored window
Return
ExitScript:
ExitApp
CtrlMove(X, Y, W, H, Dir, Sign, Val)
{
global
If (!WinCtrlS Or IsInvisible)
{
TrayTip,, % "stored window "
. (IsInvisible ? "must be visible":"is not found!")
Return
}
WinActivate, % "ahk_id"WinIDS
ControlMove, % WinCtrlS, X, Y, W, H, % "ahk_id"WinIDS
MouseMove, X+W/2, Y+H/2
TrayTip,, % " control: "WinCtrlS
. "`nact.: "Sign ", dir.: "Dir ", val.: "Val
WinSet, Redraw,, % "ahk_id"WinID
}
WinResize(W, H)
{
global
If (!WinIDS Or IsInvisible)
{
TrayTip,, % "stored window "
. (IsInvisible ? "must be visible":"is not found!")
Return
}
WinActivate, % "ahk_id"WinIDS
WinMove, % "ahk_id"WinIDS,, WinXC, WinYC, W, H
MouseMove, W/2, H/2
TrayTip,, % "size window: "WinTitleS
. "`n"W "x"H
WinSet, Redraw,, % "ahk_id"WinID
}
StoreInfo()
{
global
WinTitleS:=WinTitle
WinCtrlS:=WinCtrl, WinIDS:=WinID
WinWS:=WinWC:=WinW, WinHS:=WinHC:=WinH
CtrlXS:=CtrlXC:=CtrlX, CtrlYS:=CtrlYC:=CtrlY
CtrlWS:=CtrlWC:=CtrlW, CtrlHS:=CtrlHC:=CtrlH
WinGet, IsExStyle, ExStyle, % "ahk_id"WinIDS
Menu, Tray, % IsExStyle&8 ? "Check":"Uncheck"
, &AOT stored window
If (WinIDSV!=WinIDS)
{
WinSet, Trans, % TransValue:=255, % "ahk_id"WinIDSV
WinIDSV:=""
}
}
BackInfo()
{
global
If ((WinIDT=WinIDS And IsUsed) Or IsInvisible)
{
TrayTip,, stored window must be visible
Return
}
CtrlMove(CtrlXS, CtrlYS, CtrlWS, CtrlHS, "", "", "")
WinResize(WinWS, WinHS), Message("reset", "resize")
CtrlXC:=CtrlXS, CtrlYC:=CtrlYS
CtrlWC:=CtrlWS, CtrlHC:=CtrlHS
}
Message(Text1, Text2)
{
global
TrayTip,, % Text1 " control: "WinCtrlS
. "`nx: "CtrlXS ", y: "CtrlYS
. ", w: "CtrlWS ", h: "CtrlHS
. "`n"Text2 " window: "WinTitleS
. "`n"WinWS "x"WinHS
}
CurrentInfo()
{
global
ToolTip, % "coords: ax: "XPosA ", ay: "YPosA
. "`n`trx: "XPosR ", ry: "YPosR
; . "`nwindow: "WinTitle
; . "`n`tw: "WinW ", h: "WinH
; . "`n`tx: "WinX ", y: "WinY
. "`ncontrol: "WinCtrl
. "`n`tw: "CtrlW ", h: "CtrlH
. "`n`tx: "CtrlX ", y: "CtrlY
}
WM_LBUTTONUP(wParam, lParam, Msg, hWnd)
{
global
If (Msg=0x401 And lParam=0x202) ; WM_USER & WM_LBUTTONUP
{
WinShow, % "ahk_id"WinIDT
WinActivate, % "ahk_id"WinIDT
TrayIcon(A_ScriptHwnd, 1, 0x401, 0, "", 2)
DllCall("DestroyIcon", Int, hIcon)
WinIDT:=IsUsed:=False
}
}
TrayIcon(hWnd, uID, uCbMsg=0, hIcon=0, Title="", dwMsg=2)
{
VarSetCapacity(NID, 68, 0)
NumPut(VarSetCapacity(NID), NID, 0)
NumPut(hWnd, NID, 4)
NumPut(uID, NID, 8)
NumPut(7, NID, 12)
NumPut(uCbMsg, NID, 16)
NumPut(hIcon, NID, 20)
StrPut(Title, &NID+24, 64, "UTF-16")
DllCall("Shell32.dll\Shell_NotifyIcon"
. (A_IsUnicode ? "W":"A"), Int, dwMsg
, Int, &NID)
}
Я делаю под личные нужды, что-то подобное, позже выложу.