【AHK】自定义窗口大小的GUI,鼠标调整窗口大小/移动窗口位置/窗口置顶/透明度
需求:上一个窗口设置文档,发现如果还有其他大小的需求的话,发现键位根本不够用,现在了个通过GUI界面方便多了。也可以通过这个为模板案例,学习一下如何使用AHK的GUI。
首先,界面下图所示。
每次使用完,会自动销毁窗口,功能主要是偶尔四个选区工作的要求
;=========================================================
#w:: ;加上&号是为了添加快捷键,和win右键菜单逻辑是一样的
Gui, Destroy
Gui +AlwaysOnTop
Gui Add, Button, gChoiceA w100, 左上&1
Gui Add, Button, gChoiceB w100, 右上&2
Gui Add, Button, gChoiceC w100, 左下&3
Gui Add, Button, gChoiceH w100, 右下&4
Gui Add, Button, gChoiceD w100, 居中(&q)
Gui Add, Button, gChoiceE w100, 居中(&w)
Gui, Show, AutoSize Center
Return
;设置快捷键esc退出
GuiEscape:
gui,destroy
return
ChoiceA:
gui,destroy
WinMove, A, , 100, 0,1250, 700
Return
ChoiceB:
gui,destroy
winmove, a, , 1350, 0, 1200, 700
Return
ChoiceC:
gui,destroy
winmove, a, , 100, 750, 1250, 700
Return
ChoiceH:
gui,destroy
winmove, a, , 1350, 750, 1200, 700
Return
ChoiceD:
gui,destroy
winmove, a, , 550, 120, 1600, 1150
return
ChoiceE:
gui,destroy
winmove, a, , 220, 50, 2100, 1300
return
通过AHK,设置窗体大小或位置,首先是两种鼠标调节窗体方案,后面是快捷键,注意修改快捷键的位置有两个,仿照Ubuntu调节窗体的快捷键 Alt+F7、Alt+F8,个人感觉比要按着ALT调节的小工具要好用一点。
如果换成单个F7、F8触发,只需要将多出的GetKeyState删除即可,具体函数意思可百度。
调整窗体位置
墙裂推荐设置成鼠标的两个侧键,真的巨方便!!!
并限制了,移动顶部距离,调整窗口的最大高度
注:搭配这个使用,远程电脑时才可不影响远程端的该快捷键控制
#ifWinNotActive ahk_exe mstsc.exe
#ifWinNotActive
方案 1:鼠标侧键版 调窗体
xbutton2::
CoordMode, Mouse, Screen
MouseGetPos, mX0, mY0 , hwnd
IfWinExist, ahk_id %hwnd%
{
;获取初始窗口位置
WinGetPos, wX0, wY0
WinActivate, ahk_id %hwnd%
}
Else
Return
IfWinActive ahk_class WorkerW ;如果是桌面的话则不移动
Return
Loop{
GetKeyState, mState, xbutton2, P
if mState = U
{
ToolTip
break
}
SysGet, ScreenWidth, 61
MouseGetPos, mX, mY
SetWinDelay, -1
if (wY0+mY-mY0)<0{ ;如果到移动到顶部就不移动
if(mX)<ScreenWidth{ ;如果移动到扩展屏则不限制移动
WinMove, ahk_id %hwnd%, , wX0+mX-mX0, 0
}
else{
WinMove, ahk_id %hwnd%, , wX0+mX-mX0, wY0+mY-mY0
}
}
else{
WinMove, ahk_id %hwnd%, , wX0+mX-mX0, wY0+mY-mY0
}
}
Return
;========================================================
xbutton1::
setWinDelay,0
CoordMode,mouse,Screen
MouseGetPos,mx1,my1
WinGetPos,winx,winy,winw,winh,A
loop{
GetKeyState,vstate,xbutton1,p
if vstate=U
break
SysGet, ScreenHeight, 62
MouseGetPos,mx2,my2
xx=% winw + mx2 - mx1
yy=% winh + my2 - my1
tooltip 窗口y坐标%winy% 窗口原长度%winh% 窗口后长度%yy%
if(winy+yy)<(ScreenHeight){
winmove,A,,%winx%,%winy%,%xx%,%yy%
}else{
winmove,A,,%winx%,%winy%,%xx%,ScreenHeight-%winy%
}
sleep,10
}
Return
;========================================================
方案2 鼠标无侧键版 调窗体
使用方法就是:按着中键即可移动窗体,左右键一起按即可触发调整窗体,触发后可以松开左键,也可以不松开对窗口进行移动调节
mbutton::
ToolTip,
;设置鼠标坐标模式为相对屏幕
CoordMode, Mouse, Screen
MouseGetPos, mX0, mY0 , hwnd
IfWinExist, ahk_id %hwnd%
{
;获取初始窗口位置
WinGetPos, wX0, wY0
WinActivate, ahk_id %hwnd%
}
Else
Return
Loop{
;GetKeyState, state, LAlt, P
;if state = U
;{
; ToolTip
; break
;}
GetKeyState, mState, mbutton, P
if mState = U
{
ToolTip
break
}
;获取当前鼠标位置
MouseGetPos, mX, mY
SetWinDelay, -1
WinMove, ahk_id %hwnd%, , wX0+mX-mX0, wY0+mY-mY0
}
Return
;========================================================
~lbutton & rbutton::
setWinDelay,0
CoordMode,mouse,Screen
MouseGetPos,mx1,my1
WinGetPos,winx,winy,winw,winh,A
loop{
;GetKeyState,vstate,LAlt,p
GetKeyState,vstate,rbutton,p
if vstate=U
break
MouseGetPos,mx2,my2
xx=% winw + mx2 - mx1
yy=% winh + my2 - my1
winmove,A,,%winx%,%winy%,%xx%,%yy%
sleep,30
}
Return
方案3 快捷键版 调窗体
LAlt & F7::
ToolTip,
;设置鼠标坐标模式为相对屏幕
CoordMode, Mouse, Screen
MouseGetPos, mX0, mY0 , hwnd
IfWinExist, ahk_id %hwnd%
{
;获取初始窗口位置
WinGetPos, wX0, wY0
WinActivate, ahk_id %hwnd%
}
Else
Return
Loop{
GetKeyState, state, LAlt, P
if state = U
{
ToolTip
break
}
GetKeyState, mState, F7, P
if mState = U
{
ToolTip
break
}
;获取当前鼠标位置
MouseGetPos, mX, mY
SetWinDelay, -1
WinMove, ahk_id %hwnd%, , wX0+mX-mX0, wY0+mY-mY0
}
Return
;调整窗体大小
;========================================================
LAlt & F8::
SetWinDelay,0
CoordMode,mouse,Screen
MouseGetPos,mx1,my1
WinGetPos,winx,winy,winw,winh,A
loop{
GetKeyState,vstate,LAlt,p
GetKeyState,vstate,F8,p
//对照上面的方式2
if vstate=U
break
MouseGetPos,mx2,my2
xx=% winw + mx2 - mx1
yy=% winh + my2 - my1
winmove,A,,%winx%,%winy%,%xx%,%yy%
sleep,30
}
Return
快速调整窗体位置大小
#`::WinMove, A, , 700, 50,1280, 1300
#1::WinMove, A, , 10, 10,1700, 1700
#2::WinMove, A, , 100, 10,1200, 1700
#3::WinMove, A, , 1300, 0,1200, 1700
#4::WinMove, A, , 1300, 0,1280, 1700
窗体置顶
;这里设置了两个快捷键,左右两边
#Enter::
#CapsLock::
WinGet ow, id, A
WinTopToggle(ow)
return
WinTopToggle(w) {
WinGetTitle, oTitle, ahk_id %w%
Winset, AlwaysOnTop, Toggle, ahk_id %w%
WinGet, ExStyle, ExStyle, ahk_id %w%
if (ExStyle & 0x8) ; 0x8 为 WS_EX_TOPMOST.在WinGet的帮助中
oTop = 置顶
else
oTop = 取消置顶
tooltip %oTitle% %oTop%
SetTimer, RemoveToolTip, 5000
return
RemoveToolTip:
SetTimer, RemoveToolTip, Off
ToolTip
return
}
窗体透明度调整
;窗口透明化增加或者减弱
#=::
WinGet, ow, id, A
WinTransplus(ow)
return
;窗口透明化增加或者减弱
#-::
WinGet, ow, id, A
WinTransMinus(ow)
return
WinTransplus(w){
WinGet, transparent, Transparent, ahk_id %w%
if transparent < 255
transparent := transparent+10
else
transparent =
if transparent
WinSet, Transparent, %transparent%, ahk_id %w%
else
WinSet, Transparent, off, ahk_id %w%
return
}
WinTransMinus(w){
WinGet, transparent, Transparent, ahk_id %w%
if transparent
transparent := transparent-10
else
transparent := 240
WinSet, Transparent, %transparent%, ahk_id %w%
return
}
获取当前鼠标位置
ToolTip, 鼠标位置:X=%wX0% Y=%wY0%
摘抄自网络,便于检索查找。