|
阅读:2157回复:0
小小输入法状态栏拖动逻辑补充与位置限制
1、拖动逻辑补充了,鼠标在状态栏任意位置按下鼠标左键(持续时间超过0.5秒)可拖动状态栏;
2、位置限制了,状态栏不可拖出工作区域之外; 下面是AHK V2的实现脚本: #SingleInstance Force
#HotIf MouseIsOver("ahk_class yong_main")
~LButton::
{
; 循环外获取初始值(标准做法,最可靠)
CoordMode("Mouse", "Screen")
MouseGetPos &StartX, &StartY, &Win
WinGetPos &WinX, &WinY, &WinW, &WinH, "ahk_id " Win
MonitorGetWorkArea(, &WorkLeft, &WorkTop, &WorkRight, &WorkBottom)
if !KeyWait("LButton", "T0.5") {
while GetKeyState("LButton", "P") {
MouseGetPos &CurX, &CurY
; 计算新位置
NewX := WinX + CurX - StartX
NewY := WinY + CurY - StartY
; 更新新位置
WinX := NewX
WinY := NewY
StartX := CurX
StartY := CurY
; 边界截断
NewX := Max(NewX, WorkLeft)
NewX := Min(NewX, WorkRight - WinW)
NewY := Max(NewY, WorkTop)
NewY := Min(NewY, WorkBottom - WinH)
; 移动窗口
DllCall("SetWindowPos", "ptr", Win, "ptr", 0, "int", NewX, "int", NewY, "int", 0, "int", 0, "uint", 0x0005)
Sleep 10
}
; 拖动后保存位置,x坐标加一防止窗口被拖到左上角松开后(坐标为0, 0)又自动跳至右下角(pos为0时默认位置为右下角)
RunWait('d:\yong\w64\yong-config.exe --set main pos ' NewX+1 ',' NewY, , "Hide")
}
}
#HotIf
MouseIsOver(WinTitle)
{
MouseGetPos(,, &Win)
return WinExist(WinTitle " ahk_id " Win)
} |
|