• 按键公众号 :
按键精灵电脑版
立即下载

软件版本:2014.06
软件大小:22.9M
更新时间:2021-12-03

按键精灵安卓版
立即下载

软件版本:3.7.2
软件大小:46.2M
更新时间:2023-05-10

按键精灵iOS版
立即下载

软件版本:1.8.0
软件大小:29.2M
更新时间:2023-03-21

按键手机助手
立即下载

软件版本:3.8.0
软件大小:262M
更新时间:2023-05-30

快捷导航

登录 后使用快捷导航
没有帐号? 注册

发新话题 回复该主题

[昨夜星辰] 【源码】窗口自动排列 [复制链接]

1#
我们平时会有打开多个相同窗口的需求,但是窗口很多的话显示会很乱,想清晰、直观地观察到窗口就得将窗口进行排列。如果是手动排列窗口既麻烦又不精准,今天我就分享一下如何将特定的窗口进行自动排列。

堆叠排列演示:


层叠排列演示:


源码:
  1. For 7
  2. RunApp "Notepad.exe"
  3. Next
  4. Call 堆叠排列窗口("记事本", "Notepad")
  5. Delay 1000
  6. RunApp "cmd /c taskkill /IM Notepad.exe /F /T"
  7. Delay 1000
  8. For 7
  9. RunApp "Notepad.exe"
  10. Next
  11. Call 层叠排列窗口("记事本", "Notepad")
  12. Delay 1000
  13. RunApp "cmd /c taskkill /IM Notepad.exe /F /T"
  14. Delay 1000
  15. Function 堆叠排列窗口(窗口标题, 窗口类名)
  16. Dim 屏幕大小, 任务栏窗口句柄, 任务栏大小, 可使用屏幕大小, sRect
  17. Dim 待排列窗口大小, 当前窗口句柄, 排列X间距, 排列Y间距
  18. 屏幕大小 = Array(Plugin.Sys.GetScRX(), Plugin.Sys.GetScRY())
  19. 任务栏窗口句柄 = Plugin.Window.Find("Shell_TrayWnd", 0)
  20. If 任务栏窗口句柄 <> 0 Then
  21. sRect = Plugin.Window.GetWindowRect(任务栏窗口句柄)
  22. sRect = Split(sRect, "|")
  23. 任务栏大小 = Array(CLng(sRect(2)) - CLng(sRect(0)), CLng(sRect(3)) - CLng(sRect(1)))
  24. Else
  25. 任务栏大小 = Array(0, 0)
  26. End If
  27. 可使用屏幕大小 = Array(屏幕大小(0), 屏幕大小(1) - 任务栏大小(1))
  28. Dim hwnds, U_hwnds, i, 窗口数量, 窗口在左时X坐标, 窗口在右时X坐标, 窗口Y坐标, 窗口Y间距
  29. hwnds = Plugin.Window.SearchEx(窗口类名, 窗口标题, 0)
  30. If hwnds = "" Then
  31. MessageBox "未查找到匹配窗口!"
  32. Else
  33. hwnds = Split(hwnds, "|")
  34. U_hwnds = UBound(hwnds)
  35. sRect = Plugin.Window.GetWindowRect(CLng(hwnds(0)))
  36. sRect = Split(sRect, "|")
  37. 待排列窗口大小 = Array(CLng(sRect(2)) - CLng(sRect(0)), CLng(sRect(3)) - CLng(sRect(1)))
  38. 窗口数量 = U_hwnds
  39. 窗口在左时X坐标 = 0
  40. 窗口在右时X坐标 = 可使用屏幕大小(0) - 待排列窗口大小(0)
  41. 窗口Y坐标 = 0
  42. If 窗口数量 > 2 Then
  43. If 窗口数量 Mod 2 = 0 Then '窗口为整数
  44. 窗口Y间距 = (可使用屏幕大小(1) - 待排列窗口大小(1)) / (((窗口数量 \ 2)) - 1)
  45. Else
  46. 窗口Y间距 = (可使用屏幕大小(1) - 待排列窗口大小(1)) / ((窗口数量 \ 2))
  47. End If
  48. Else
  49. 窗口Y间距 = 0
  50. End If
  51. For i = 0 To U_hwnds - 1
  52. 当前窗口句柄 = CLng(hwnds(i))
  53. If (i + 1) Mod 2 = 0 Then
  54. Call Plugin.Window.Move(当前窗口句柄, 窗口在右时X坐标, 窗口Y坐标)
  55. Else
  56. If (i + 1) <> 1 Then
  57. 窗口Y坐标 = 窗口Y坐标 + 窗口Y间距
  58. End If
  59. Call Plugin.Window.Move(当前窗口句柄, 窗口在左时X坐标, 窗口Y坐标)
  60. End If
  61. Next
  62. End If
  63. End Function
  64. Function 层叠排列窗口(窗口标题, 窗口类名)
  65. Dim 屏幕大小, 任务栏窗口句柄, 任务栏大小, 可使用屏幕大小
  66. Dim 待排列窗口大小, 当前窗口句柄, 排列X间距, 排列Y间距
  67. 屏幕大小 = Array(Plugin.Sys.GetScRX(), Plugin.Sys.GetScRY())
  68. 任务栏窗口句柄 = Plugin.Window.Find("Shell_TrayWnd", 0)
  69. If 任务栏窗口句柄 <> 0 Then
  70. sRect = Plugin.Window.GetWindowRect(任务栏窗口句柄)
  71. sRect = Split(sRect, "|")
  72. 任务栏大小 = Array(CLng(sRect(2)) - CLng(sRect(0)), CLng(sRect(3)) - CLng(sRect(1)))
  73. Else
  74. 任务栏大小 = Array(0, 0)
  75. End If
  76. 可使用屏幕大小 = Array(屏幕大小(0), 屏幕大小(1) - 任务栏大小(1))
  77. Dim hwnds, U_hwnds, i, 窗口数量, 窗口X坐标, 窗口Y坐标, 窗口X间距, 窗口Y间距
  78. hwnds = Plugin.Window.SearchEx(窗口类名, 窗口标题, 0)
  79. If hwnds = "" Then
  80. MessageBox "未查找到匹配窗口!"
  81. Else
  82. hwnds = Split(hwnds, "|")
  83. U_hwnds = UBound(hwnds)
  84. sRect = Plugin.Window.GetWindowRect(CLng(hwnds(0)))
  85. sRect = Split(sRect, "|")
  86. 待排列窗口大小 = Array(CLng(sRect(2)) - CLng(sRect(0)), CLng(sRect(3)) - CLng(sRect(1)))
  87. 窗口数量 = U_hwnds
  88. 窗口X坐标 = 0
  89. 窗口Y坐标 = 0
  90. If 窗口数量 > 1 Then
  91. 窗口X间距 = (可使用屏幕大小(0) - 待排列窗口大小(0)) / (窗口数量 - 1)
  92. 窗口Y间距 = (可使用屏幕大小(1) - 待排列窗口大小(1)) / (窗口数量 - 1)
  93. Else
  94. 窗口X间距 = 0
  95. 窗口Y间距 = 0
  96. End If
  97. For i = 0 To U_hwnds-1
  98. 当前窗口句柄 = CLng(hwnds(i))
  99. Call Plugin.Window.Move(当前窗口句柄, 窗口X坐标, 窗口Y坐标)
  100. 窗口X坐标 = 窗口X坐标 + 窗口X间距
  101. 窗口Y坐标 = 窗口Y坐标 + 窗口Y间距
  102. Next
  103. End If
  104. End Function
复制代码

本主题由 超级版主 瑞祥幽冥狼 于 2023/10/5 18:38:16 执行 审核帖子 操作
近期制作:
传奇私服各种反外挂插件版本挂机软件,可教可售
原神加速、连发辅助工具
天下3自动钓大鱼辅助工具

承接脚本定制,点击下方联系
QQ:250039815

交流群:101296478

2#

多窗口同时操作方法

3#

源码】窗口自动排列

4#

3333333

5#

11213213

6#

11111111111111

7#

谁与美人共枕夕阳长醉两千年~

8#

可不可以写一个 轮流显示 窗口的源码
就是五开txt 轮流最大化显示新建文本文档笔记本窗口1 暂停三秒 2暂停三秒 3 暂停三秒 4 暂停三秒 5暂停三秒 然后不断循环 ,.,

点评

昨夜星辰  那不是很简单的东西吗 直接FOR循环就行了啊 不知道你的用途是啥  发表于 2022/6/10 17:35:02

9#

学习下啊啊啊啊

10#

学习学习

11#

学习新的 知识

12#

win10好像可以自动排列吧

点评

昨夜星辰  那是所有窗口排列,我这个是指定窗口排列,只想排列游戏窗口就很有用。  发表于 2022/6/14 21:20:29

13#

,

那貌似你这个不错
win10自带的貌似也可以自动排列游戏窗口的,我多开窗口也能自动排列,就是没有想要的大小和固定排序位置~

14#

窗口自动排列

15#

学习学习学习学习学习

16#

学习一下

17#

学习下啊啊啊啊

18#

期待看看如何

19#

11111111

20#

55555555

发新话题 回复该主题