- 按键认证大神
- 728264
- 3501
- 18
- 1898 朵
- 27453 个
- 1717 个
- 82980
- 2011-08-04
|
1#
t
T
发表于 2022-06-03 11:41
|
|只看楼主
我们平时会有打开多个相同窗口的需求,但是窗口很多的话显示会很乱,想清晰、直观地观察到窗口就得将窗口进行排列。如果是手动排列窗口既麻烦又不精准,今天我就分享一下如何将特定的窗口进行自动排列。堆叠排列演示:层叠排列演示:源码:- For 7
- RunApp "Notepad.exe"
- Next
- Call 堆叠排列窗口("记事本", "Notepad")
- Delay 1000
- RunApp "cmd /c taskkill /IM Notepad.exe /F /T"
- Delay 1000
- For 7
- RunApp "Notepad.exe"
- Next
- Call 层叠排列窗口("记事本", "Notepad")
- Delay 1000
- RunApp "cmd /c taskkill /IM Notepad.exe /F /T"
- Delay 1000
- Function 堆叠排列窗口(窗口标题, 窗口类名)
- Dim 屏幕大小, 任务栏窗口句柄, 任务栏大小, 可使用屏幕大小, sRect
- Dim 待排列窗口大小, 当前窗口句柄, 排列X间距, 排列Y间距
- 屏幕大小 = Array(Plugin.Sys.GetScRX(), Plugin.Sys.GetScRY())
- 任务栏窗口句柄 = Plugin.Window.Find("Shell_TrayWnd", 0)
- If 任务栏窗口句柄 <> 0 Then
- sRect = Plugin.Window.GetWindowRect(任务栏窗口句柄)
- sRect = Split(sRect, "|")
- 任务栏大小 = Array(CLng(sRect(2)) - CLng(sRect(0)), CLng(sRect(3)) - CLng(sRect(1)))
- Else
- 任务栏大小 = Array(0, 0)
- End If
- 可使用屏幕大小 = Array(屏幕大小(0), 屏幕大小(1) - 任务栏大小(1))
- Dim hwnds, U_hwnds, i, 窗口数量, 窗口在左时X坐标, 窗口在右时X坐标, 窗口Y坐标, 窗口Y间距
- hwnds = Plugin.Window.SearchEx(窗口类名, 窗口标题, 0)
- If hwnds = "" Then
- MessageBox "未查找到匹配窗口!"
- Else
- hwnds = Split(hwnds, "|")
- U_hwnds = UBound(hwnds)
- sRect = Plugin.Window.GetWindowRect(CLng(hwnds(0)))
- sRect = Split(sRect, "|")
- 待排列窗口大小 = Array(CLng(sRect(2)) - CLng(sRect(0)), CLng(sRect(3)) - CLng(sRect(1)))
- 窗口数量 = U_hwnds
- 窗口在左时X坐标 = 0
- 窗口在右时X坐标 = 可使用屏幕大小(0) - 待排列窗口大小(0)
- 窗口Y坐标 = 0
- If 窗口数量 > 2 Then
- If 窗口数量 Mod 2 = 0 Then '窗口为整数
- 窗口Y间距 = (可使用屏幕大小(1) - 待排列窗口大小(1)) / (((窗口数量 \ 2)) - 1)
- Else
- 窗口Y间距 = (可使用屏幕大小(1) - 待排列窗口大小(1)) / ((窗口数量 \ 2))
- End If
- Else
- 窗口Y间距 = 0
- End If
- For i = 0 To U_hwnds - 1
- 当前窗口句柄 = CLng(hwnds(i))
- If (i + 1) Mod 2 = 0 Then
- Call Plugin.Window.Move(当前窗口句柄, 窗口在右时X坐标, 窗口Y坐标)
- Else
- If (i + 1) <> 1 Then
- 窗口Y坐标 = 窗口Y坐标 + 窗口Y间距
- End If
- Call Plugin.Window.Move(当前窗口句柄, 窗口在左时X坐标, 窗口Y坐标)
- End If
- Next
- End If
- End Function
- Function 层叠排列窗口(窗口标题, 窗口类名)
- Dim 屏幕大小, 任务栏窗口句柄, 任务栏大小, 可使用屏幕大小
- Dim 待排列窗口大小, 当前窗口句柄, 排列X间距, 排列Y间距
- 屏幕大小 = Array(Plugin.Sys.GetScRX(), Plugin.Sys.GetScRY())
- 任务栏窗口句柄 = Plugin.Window.Find("Shell_TrayWnd", 0)
- If 任务栏窗口句柄 <> 0 Then
- sRect = Plugin.Window.GetWindowRect(任务栏窗口句柄)
- sRect = Split(sRect, "|")
- 任务栏大小 = Array(CLng(sRect(2)) - CLng(sRect(0)), CLng(sRect(3)) - CLng(sRect(1)))
- Else
- 任务栏大小 = Array(0, 0)
- End If
- 可使用屏幕大小 = Array(屏幕大小(0), 屏幕大小(1) - 任务栏大小(1))
- Dim hwnds, U_hwnds, i, 窗口数量, 窗口X坐标, 窗口Y坐标, 窗口X间距, 窗口Y间距
- hwnds = Plugin.Window.SearchEx(窗口类名, 窗口标题, 0)
- If hwnds = "" Then
- MessageBox "未查找到匹配窗口!"
- Else
- hwnds = Split(hwnds, "|")
- U_hwnds = UBound(hwnds)
- sRect = Plugin.Window.GetWindowRect(CLng(hwnds(0)))
- sRect = Split(sRect, "|")
- 待排列窗口大小 = Array(CLng(sRect(2)) - CLng(sRect(0)), CLng(sRect(3)) - CLng(sRect(1)))
- 窗口数量 = U_hwnds
- 窗口X坐标 = 0
- 窗口Y坐标 = 0
- If 窗口数量 > 1 Then
- 窗口X间距 = (可使用屏幕大小(0) - 待排列窗口大小(0)) / (窗口数量 - 1)
- 窗口Y间距 = (可使用屏幕大小(1) - 待排列窗口大小(1)) / (窗口数量 - 1)
- Else
- 窗口X间距 = 0
- 窗口Y间距 = 0
- End If
- For i = 0 To U_hwnds-1
- 当前窗口句柄 = CLng(hwnds(i))
- Call Plugin.Window.Move(当前窗口句柄, 窗口X坐标, 窗口Y坐标)
- 窗口X坐标 = 窗口X坐标 + 窗口X间距
- 窗口Y坐标 = 窗口Y坐标 + 窗口Y间距
- Next
- End If
- End Function
复制代码
|