Buraya komutumu yapıştırıyorum. Çok çirkin, ama iki monitörlü kurulumda anlattığın gibi çalışıyor: önceki pencereye geçiyor (ortadaki düğmeyi tıkladığınız monitör için). işlevleri (GetMonitorIndexFromWindow(windowHandle)
) arasında
#WinActivateForce
#SingleInstance
#Persistent
CoordMode, Mouse, Screen
CoordMode, ToolTip, Screen
DetectHiddenWindows, On
SetTitleMatchMode , 2
SetBatchLines , -1
SetWorkingDir %A_ScriptDir%
Thread, interrupt, 0
SetTimer, UpdateCurrentWindow, 100
isDebug := true
SysGet, monitors_total, MonitorCount
SysGet, monitor_primary, MonitorPrimary
Hotkey, MButton, SwitchToLastWindow, On
return
SwitchToLastWindow:
WinGet, active_id, ID, A
Loop , %monitors_total%
{
if (A_Index != current_monitor)
continue
switch_to_window := (active_id = winlast%A_Index%)
? winprelast%A_Index%
: winlast%A_Index%
}
WinActivate , ahk_id %switch_to_window%
return
UpdateCurrentWindow:
WinGet, active_id, ID, A
monitor_index := GetMonitorIndexFromWindow(active_id)
current_monitor := GetMonitorIndexFromMouse()
if (monitor_index > monitors_total)
monitors_total := monitor_index
if (winlast%monitor_index% != active_id)
{
winprelast%monitor_index% := winlast%monitor_index%
winlast%monitor_index% := active_id
}
if isDebug
{
DebugToolTip := ""
Loop , %monitors_total%
{
DebugToolTip .= "Monitor # " . A_Index
. ":`n`nLast window: " . winlast%A_Index%
. "`nPre-last window: " . winprelast%A_Index% . "`n`n"
}
MouseGetPos, xpos, ypos
DebugToolTip .= "x: " . xpos . "`ny: " . ypos . "`ncurrent_monitor: " . current_monitor
. "`n`nA_ScreenHeight: " . A_ScreenHeight . "`nA_ScreenWidth: " . A_ScreenWidth
. "`n`nmonitors_total: " . monitors_total . "`nmonitor_primary: " . monitor_primary
ToolTip , %DebugToolTip%, 10, 10
}
return
; only done for one case: total 2 monitors, monitor to the left is primary
; need to redo for the generic case
GetMonitorIndexFromMouse()
{
SysGet, monitors_total, MonitorCount
SysGet, monitor_primary, MonitorPrimary
MouseGetPos, xpos, ypos
current_monitor := (xpos > A_ScreenWidth) ? 2 : 1
return current_monitor
}
; this function is from autohotkey.com/board/topic/69464-how-to-determine-a-window-is-in-which-monitor/?p=440355
GetMonitorIndexFromWindow(windowHandle)
{
; Starts with 1.
monitorIndex := 1
VarSetCapacity(monitorInfo, 40)
NumPut(40, monitorInfo)
if (monitorHandle := DllCall("MonitorFromWindow", "uint", windowHandle, "uint", 0x2))
&& DllCall("GetMonitorInfo", "uint", monitorHandle, "uint", &monitorInfo)
{
monitorLeft := NumGet(monitorInfo, 4, "Int")
monitorTop := NumGet(monitorInfo, 8, "Int")
monitorRight := NumGet(monitorInfo, 12, "Int")
monitorBottom := NumGet(monitorInfo, 16, "Int")
workLeft := NumGet(monitorInfo, 20, "Int")
workTop := NumGet(monitorInfo, 24, "Int")
workRight := NumGet(monitorInfo, 28, "Int")
workBottom := NumGet(monitorInfo, 32, "Int")
isPrimary := NumGet(monitorInfo, 36, "Int") & 1
SysGet, monitorCount, MonitorCount
Loop, %monitorCount%
{
SysGet, tempMon, Monitor, %A_Index%
; Compare location to determine the monitor index.
if ((monitorLeft = tempMonLeft) and (monitorTop = tempMonTop)
and (monitorRight = tempMonRight) and (monitorBottom = tempMonBottom))
{
monitorIndex := A_Index
break
}
}
}
return monitorIndex
}
bir mine, from here alınan değildir.
GetMonitorIndexFromMouse()
işlevim için genel durumda çalışma zamanım olmadığına dikkat edin, bu yüzden yalnızca özel durumum için iyi (2 monitör, soldaki gibi birincil).
isDebug := true
Burada, değişkenlerle araç ipucunu görebilmeniz için - script sizin için çalışıyorsa, elbette isDebug := false
'a değiştirmek için çekinmeyin.
Her iki monitör için en son açılan iki pencere (iki monitör durumunda) pencerelerini izleyen bir komut dosyası yazabileceğinizi hayal edebiliyorum. Periyodik olarak kontrol eder ve günceller. Kısayol tuşuna basıldığında, geçerli monitörün, geçerli pencerenin ne olduğunu saptamalı ve ardından bu monitör için en son iki pencere listesini kontrol etmelidir. Birincisi o anda aktif olanla aynı ise, ikinciye geçer; değil - ikisinden ilkine. – stansult
Teşekkürler, evet böyle bir şey işe yarayabileceğini düşündüğüm şey. Sorun şu ki, sıfırdan yapamam! Uyum sağlayabileceğim bir şey bulmayı umuyordum, ama henüz yapmadım. – omaxio
Bu basit olmayacak. Pencerenin hangi ekranda olduğunu kontrol edebilirsiniz: http://stackoverflow.com/questions/34338637/determining-which-screen-a-window-is-on-by-checking-where-the-most-surfacearea – Forivin