【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%

 

posted @ 2024-10-24 14:25  CharyGao  阅读(23)  评论(0编辑  收藏  举报