#NoEnv
#SingleInstance Force
; 定义要匹配的窗口标题部分
windowTitlePart := "00761"
SetTimer, MoveMouse, 10000 ; 每隔10秒执行一次MoveMouse函数
return
MoveMouse:
; 遍历所有窗口
WinGet, windowList, List
Loop, %windowList%
{
hWnd := windowList%A_Index%
WinGetTitle, windowTitle, ahk_id %hWnd%
; 判断窗口标题是否包含指定的部分标题
if (InStr(windowTitle, windowTitlePart))
{
; 获取应用窗口的坐标和状态
WinGetPos, windowX, windowY, windowWidth, windowHeight, ahk_id %hWnd%
WinGet, windowState, MinMax, ahk_id %hWnd%
; 检查窗口是否可见
if (windowWidth > 0 && windowHeight > 0)
{
; 如果窗口被最小化,先恢复窗口尺寸
if (windowState)
{
WinRestore, ahk_id %hWnd%
; 可以在这里添加适当的延迟,以确保窗口恢复正常
Sleep, 500
}
; 检查窗口是否有活动
lastActivity := A_TickCount - GetLastActivityTime(hWnd)
if (lastActivity > 60000)
{
; 检查窗口是否已经是全屏状态
if !(windowWidth = A_ScreenWidth && windowHeight = A_ScreenHeight)
{
; 记录当前鼠标位置
MouseGetPos, originalMouseX, originalMouseY
; 置顶并全屏窗口
WinSet, AlwaysOnTop, on, ahk_id %hWnd%
WinMaximize, ahk_id %hWnd%
; 计算移动范围
moveRange := windowWidth / 2
; 移动鼠标到应用窗口的左边界
MouseMove, % windowX + moveRange, % windowY + (windowHeight / 2)
; 等待一段时间
Sleep, 500
; 移动鼠标到应用窗口的右边界
MouseMove, % windowX + windowWidth - moveRange, % windowY + (windowHeight / 2)
; 最小化窗口
WinMinimize, ahk_id %hWnd%
; 恢复鼠标位置
MouseMove, originalMouseX, originalMouseY
; 记录日志
Log("窗口移动鼠标操作已执行:" . windowTitle)
}
else
{
; 记录日志
Log("窗口已经是全屏状态,不执行移动鼠标操作:" . windowTitle)
}
}
else
{
; 记录日志
Log("窗口有活动,不执行移动鼠标操作:" . windowTitle)
}
}
else
{
; 窗口不可见,可以在这里添加相应的处理逻辑,如显示警告消息
; 例如:
; MsgBox, 窗口不可见: %windowTitle%
}
}
}
return
; 获取窗口的最后活动时间
GetLastActivityTime(hWnd) {
VarSetCapacity(lastActivity, 8)
DllCall("GetLastInputInfo", "UInt", &lastActivity)
return NumGet(lastActivity, 0, "UInt64")
}
; 记录日志
Log(message) {
; 获取当前日期和时间
FormatTime, dateTime, %A_Now%, yyyy-MM-dd HH:mm:ss
; 构建日志内容
logEntry := "[" . dateTime . "] " . message
; 写入日志文件
FileAppend, %logEntry%`n, log.txt
}
; 按下Esc键停止脚本
Esc::
ExitApp