@@ -6,7 +6,7 @@ SetWinDelay(5)
6
6
7
7
; 隐藏时留出的长度以及显示时距离屏幕边缘的长度
8
8
; 由于DPI关系,margin设置,不同DPI可能不同
9
- margin := 20
9
+ margin := 10
10
10
showMargin := 0
11
11
global margin
12
12
global showMargin
@@ -15,13 +15,13 @@ moveDistance := 30
15
15
global moveDistance
16
16
17
17
; 隐藏的窗口
18
- hiddenWindowIds := []
19
- global hiddenWindowIds
18
+ hiddenWindowList := []
19
+ global hiddenWindowList
20
20
; 中间态窗口,鼠标放置暂时显示的窗口
21
- suspendWindowIds := []
22
- global suspendWindowIds
21
+ suspendWindowList := []
22
+ global suspendWindowList
23
23
24
- maxHeight := 1000
24
+ maxHeight := 800
25
25
26
26
; 加入右键菜单
27
27
myMenu := A_TrayMenu
@@ -32,15 +32,22 @@ myMenu.Add("Reset all hidden windows", Reset)
32
32
Reset (* ){
33
33
results := getSide()
34
34
leftMonitor := results[1 ]
35
+ rightMonitor := results[2 ]
35
36
leftEdge := results[3 ]
36
- MonitorGet leftMonitor,,& topEdge
37
- dpiValue := getDPI(leftMonitor)
37
+ rightEdge := results[4 ]
38
+ MonitorGet leftMonitor,,& leftTopEdge
39
+ MonitorGet rightMonitor,,& rightTopEdge
40
+ leftDPI := getDPI(leftMonitor)
41
+ rightDPI := getDPI(rightMonitor)
38
42
; 多显示器支持
39
43
global leftEdge
40
- global dpiValue
41
- global topEdge
42
- for i,v in hiddenWindowIds{
43
- WinMove (showMargin+ leftEdge,showMargin+ topEdge,,," ahk_id" v)
44
+ global rightEdge
45
+ global leftTopEdge
46
+ global rightTopEdge
47
+ global leftDPI
48
+ global rightDPI
49
+ for i,v in hiddenWindowList{
50
+ WinMove (showMargin+ leftEdge,showMargin+ leftTopEdge,,," ahk_id" v.id)
44
51
}
45
52
}
46
53
@@ -49,47 +56,46 @@ Reset(*){
49
56
SetTimer WatchCursor, 200
50
57
51
58
WatchCursor (){
52
- ; 某些时候会出错
53
- Try
54
- {
55
- DPI.MouseGetPos , , & id , & control
59
+ ; DPI.MouseGetPos 某些时候会出错
60
+ Try {
61
+ DPI.MouseGetPos , , & ahkId, & control
56
62
; 判断是否为中间态,是则不需要移动
57
- isSuspend := suspendWindowIds .Find((v) => (v = id ))
58
- if isSuspend > 0 {
63
+ suspendWindowIndex := suspendWindowList .Find((v) => (v.id =ahkId ))
64
+ if suspendWindowIndex > 0 {
59
65
; 拖动窗口去除隐藏
60
- if (isWindowMove(id )=1 ){
61
- isHidden := hiddenWindowIds.Find((v) => (v =id ))
62
- hiddenWindowIds.RemoveAt(isHidden)
63
- suspendWindowIds.RemoveAt(isSuspend)
64
- WinSetAlwaysOnTop(0 ," ahk_id" id )
65
- ; ToolTip("去除隐藏")
66
- ; sleep(1000)
67
- ; ToolTip
66
+ window := suspendWindowList.Get(suspendWindowIndex)
67
+ if (isWindowMove(window)=1 ){
68
+ hiddenWindowIndex := hiddenWindowList.Find((v) => (v.id =ahkId))
69
+ hiddenWindowList.RemoveAt(hiddenWindowIndex)
70
+ suspendWindowList.RemoveAt(suspendWindowIndex)
71
+ WinSetAlwaysOnTop(0 ," ahk_id" ahkId)
68
72
}
69
73
}
70
74
else {
71
75
; 不为中间态时,则若为其他隐藏窗口则不隐藏,接着判断是否为隐藏的窗口
72
- isHidden := hiddenWindowIds .Find((v) => (v = id ))
76
+ hiddenWindowIndex := hiddenWindowList .Find((v) => (v.id =ahkId ))
73
77
; 隐藏窗口则显示
74
- if isHidden>0 {
75
- showWindow(id )
78
+ if hiddenWindowIndex>0 {
79
+ window := hiddenWindowList.Get(hiddenWindowIndex)
80
+ showWindow(window)
76
81
}
77
82
else {
78
83
; 按顺序隐藏
79
- if suspendWindowIds .Length > 0 {
80
- suspendId := suspendWindowIds .Get(suspendWindowIds .Length )
81
- suspendWindowIds .RemoveAt(suspendWindowIds .Length )
82
- hideWindow(suspendId )
84
+ if suspendWindowList .Length > 0 {
85
+ suspendWindow := suspendWindowList .Get(suspendWindowList .Length )
86
+ suspendWindowList .RemoveAt(suspendWindowList .Length )
87
+ hideWindow(suspendWindow )
83
88
}
84
89
}
85
90
}
91
+
86
92
; else{
87
93
; ; 不为中间态时,则直接隐藏,接着判断是否为隐藏的窗口
88
- ; isHidden := hiddenWindowIds .Find((v) => (v =id))
94
+ ; isHidden := hiddenWindowList .Find((v) => (v =id))
89
95
; ; 切换到其他窗口继续隐藏
90
- ; if suspendWindowIds .Length > 0{
91
- ; suspendId := suspendWindowIds .Get(1)
92
- ; suspendWindowIds .RemoveAt(1)
96
+ ; if suspendWindowList .Length > 0{
97
+ ; suspendId := suspendWindowList .Get(1)
98
+ ; suspendWindowList .RemoveAt(1)
93
99
; hideWindow(suspendId)
94
100
; }
95
101
; ; 隐藏窗口则显示
@@ -105,75 +111,140 @@ WatchCursor(){
105
111
^Left ::{
106
112
results := getSide()
107
113
leftMonitor := results[1 ]
114
+ rightMonitor := results[2 ]
108
115
leftEdge := results[3 ]
109
- MonitorGet leftMonitor,,& topEdge
110
- dpiValue := getDPI(leftMonitor)
116
+ rightEdge := results[4 ]
117
+ MonitorGet leftMonitor,,& leftTopEdge
118
+ MonitorGet rightMonitor,,& rightTopEdge
119
+ leftDPI := getDPI(leftMonitor)
120
+ rightDPI := getDPI(rightMonitor)
111
121
; 多显示器支持
112
122
global leftEdge
113
- global dpiValue
114
- global topEdge
123
+ global rightEdge
124
+ global leftTopEdge
125
+ global rightTopEdge
126
+ global leftDPI
127
+ global rightDPI
115
128
116
- id := WinGetID(" A" )
117
- hideWindow(id )
129
+ ahkId := WinGetID(" A" )
130
+ hiddenWindowIndex := hiddenWindowList.Find((v) => (v.id =ahkId))
131
+ suspendWindowIndex := suspendWindowList.Find((v) => (v.id =ahkId))
132
+ if hiddenWindowIndex >0 {
133
+ hiddenWindowList.RemoveAt(hiddenWindowIndex)
134
+ }
135
+ if suspendWindowIndex > 0 {
136
+ suspendWindowList.RemoveAt(suspendWindowIndex)
137
+ }
138
+ hideWindow({id :ahkId,mode:" left" })
118
139
}
119
- F4 ::{
120
- ; getWinPos
140
+
141
+ ^Right ::{
142
+ results := getSide()
143
+ leftMonitor := results[1 ]
144
+ rightMonitor := results[2 ]
145
+ leftEdge := results[3 ]
146
+ rightEdge := results[4 ]
147
+ MonitorGet leftMonitor,,& leftTopEdge
148
+ MonitorGet rightMonitor,,& rightTopEdge
149
+ leftDPI := getDPI(leftMonitor)
150
+ rightDPI := getDPI(rightMonitor)
121
151
; 多显示器支持
122
-
123
- id := WinGetID(" A" )
124
- window := " ahk_id" id
152
+ global leftEdge
153
+ global rightEdge
154
+ global leftTopEdge
155
+ global rightTopEdge
156
+ global leftDPI
157
+ global rightDPI
125
158
126
- ; Get window position and size
127
- DPI.WinGetPos (& X, & Y, & W, & H, window)
128
- MsgBox " Window Position: " X " , " Y " `nWindow Size: " W " x " H
159
+ ahkId := WinGetID(" A" )
160
+ ; 判断当前窗口是否已经隐藏,若已存在则删除
161
+ hiddenWindowIndex := hiddenWindowList.Find((v) => (v.id =ahkId))
162
+ suspendWindowIndex := suspendWindowList.Find((v) => (v.id =ahkId))
163
+ if hiddenWindowIndex >0 {
164
+ hiddenWindowList.RemoveAt(hiddenWindowIndex)
165
+ }
166
+ if suspendWindowIndex > 0 {
167
+ suspendWindowList.RemoveAt(suspendWindowIndex)
168
+ }
169
+ hideWindow({id :ahkId,mode:" right" })
170
+
129
171
}
130
172
131
- F8 ::{
132
- getSide()
173
+ ^F4 ::{
174
+ hiddenCount := hiddenWindowList.Length
175
+ Loop hiddenCount {
176
+ hiddenWindowList.RemoveAt(hiddenWindowList.Length )
177
+ }
133
178
}
134
179
135
180
136
- hideWindow (id ){
181
+ hideWindow (window ){
137
182
138
- window := " ahk_id" id
183
+ windowText := " ahk_id" window.id
184
+
139
185
; 最大化窗口不可隐藏
140
- if WinExist (window ) and WinGetMinMax(window ) ! = 1 {
141
- DPI.WinGetPos (& X, & Y, & W, & H,window )
186
+ if WinExist (windowText ) and WinGetMinMax(windowText ) ! = 1 {
187
+ DPI.WinGetPos (& X, & Y, & W, & H,windowText )
142
188
; 乘以dpi 使用DPI缩放
143
- NewX := - Round (W* dpiValue)+ leftEdge+ margin
144
- ; WinMove(NewX, Y,,,window)
145
- Y :=Max(Y,topEdge)
189
+ mode := window.mode
190
+ if mode=" left" {
191
+ NewX := - Round (W* leftDPI)+ leftEdge+ Round (margin * leftDPI)
192
+ Y :=Max(Y,leftTopEdge)
193
+ }
194
+ else if mode=" right" {
195
+ NewX := rightEdge- Round (margin * rightDPI)
196
+ Y :=Max(Y,rightTopEdge)
197
+ }
198
+
146
199
if H>maxHeight{
147
- WinMove (,Y,,H,window )
200
+ WinMove (,Y,,H,windowText )
148
201
}
149
- winSmoothMove(newX,Y,window )
150
- WinSetAlwaysOnTop(1 , window )
151
- pushTo(hiddenWindowIds, id )
202
+ winSmoothMove(newX,Y,windowText )
203
+ WinSetAlwaysOnTop(1 , windowText )
204
+ pushTo(hiddenWindowList,window )
152
205
}
153
206
}
154
207
155
- showWindow (id ){
156
- window := " ahk_id" id
157
- DPI.WinGetPos (& X, & Y, & W, & H,window)
158
- NewX := showMargin+ leftEdge
208
+ showWindow (window ){
209
+ windowText := " ahk_id" window.id
210
+ mode := window.mode
211
+ DPI.WinGetPos (& X, & Y, & W, & H,windowText)
212
+ if mode=" left" {
213
+ NewX := showMargin+ leftEdge
214
+ }
215
+ else if mode=" right" {
216
+ NewX := rightEdge- Round (showMargin* rightDPI)- Round (W* rightDPI)
217
+ }
159
218
; WinMove(NewX, Y,,,window)
160
- winSmoothMove(newX,Y,window )
161
- pushTo(suspendWindowIds, id )
219
+ winSmoothMove(newX,Y,windowText )
220
+ pushTo(suspendWindowList,window )
162
221
}
163
- isWindowMove (id ){
164
- window := " ahk_id" id
165
- DPI.WinGetPos (& X, & Y, & W, & H,window)
222
+ isWindowMove (window ){
223
+ windowText := " ahk_id" window.id
224
+ mode := window.mode
225
+ DPI.WinGetPos (& X, & Y, & W, & H,windowText)
166
226
; 当窗口横坐标大于margin一定程度,认为移动
167
- if (X>showMargin+ moveDistance){
168
- return 1
227
+ if mode = " left" {
228
+ if (X>Round (showMargin* leftDPI)+ leftEdge+ moveDistance){
229
+ return 1
230
+ }
231
+ else {
232
+ return 0
233
+ }
169
234
}
170
- else {
171
- return 0
235
+ else if mode=" right" {
236
+ if (X<rightEdge- moveDistance- Round (showMargin* rightDPI) - Round (W* rightDPI)){
237
+ return 1
238
+ }
239
+ else {
240
+ return 0
241
+ }
172
242
}
243
+
173
244
}
174
- ; 列表不允许存在相同的值
245
+ ; 列表不允许存在相同的窗口
175
246
pushTo (array,value ){
176
- if array.Find((v) => (v =value)) <= 0 {
247
+ if array.Find((v) => (v.id =value.id )) <= 0 {
177
248
array.push(value)
178
249
}
179
250
}
@@ -191,11 +262,11 @@ createArray(a, b,length) {
191
262
return arr
192
263
}
193
264
; 平滑移动
194
- winSmoothMove (newX,newY,window ){
195
- DPI.WinGetPos (& X,, ,, window )
265
+ winSmoothMove (newX,newY,windowText ){
266
+ DPI.WinGetPos (& X,, ,, windowText )
196
267
arr := createArray(X,NewX,10 )
197
268
for i,v in arr{
198
- WinMove (v,newY,,,window )
269
+ WinMove (v,newY,,,windowText )
199
270
}
200
271
}
201
272
@@ -218,15 +289,14 @@ getSide(){
218
289
rightMonitor:=i
219
290
}
220
291
i+ =1
221
- ; MsgBox(i "," leftEdgeTemp "," rightEdgeTemp)
222
292
}
223
293
return [leftMonitor,rightMonitor,leftEdge,rightEdge]
224
294
}
225
295
226
296
getDPI (monitorIndex ){
227
297
monitorHandles := DPI.GetMonitorHandles()
228
298
dpiValue := DPI.GetForMonitor(monitorHandles.Get(monitorIndex))
229
- dpiValue := dpiValue / 120 * 125 / 100
299
+ dpiValue := dpiValue / 96
230
300
return dpiValue
231
301
}
232
302
0 commit comments