Picnic
Enthusiast
Ich habe ein script (im Netz gefunden) für das Programm AutoHotkey, mit dem ich alle 3 Eingänge von meinem Monitor per Tastenkombi umschalten konnte. Praktisch unbegrenzt zwischen 2 Quellen hin und her. Alle 3 Eingänge sind belegt (2x HDMI 1x DP, am DP ist der PC mit dem AutoHotkey script). Falls kein Signal auf einer Quelle anlag, hat es automatisch zurück gewechselt. Das kann aber auch an der Auto-Funktion des Monitor gelegen haben. Die Nummern der Eingänge habe ich mit dem tool controlmymonitor ausgelesen. Jetzt hab ich einen neuen Monitor, welcher die gleichen Nummer (laut controlmymonitor) hat, aber das script funzt nicht mehr. Es schaltet nur noch auf einen Eingang, aber nicht wieder zurück. Kann evtl. mal jemand da drüber gucken, ob das überhaupt noch funktionieren kann? Ich hab mit den Nummern rumgespielt, vielleicht ist was verdreht. Wäre toll, wenn das wieder funktionieren würde, Brauch das öfters mal.
MfG Picnic
MfG Picnic
Code:
#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
; #Warn ; Enable warnings to assist with detecting common errors.
SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Monitor Input umschalten mit Alt + m und Strg + Alt + m :::::::::::::::::::::::::::::
; Finds monitor handle
getMonitorHandle()
{
; Initialize Monitor handle
hMon := DllCall("MonitorFromPoint"
, "int64", 0 ; point on monitor
, "uint", 1) ; flag to return primary monitor on failure
; Get Physical Monitor from handle
VarSetCapacity(Physical_Monitor, 8 + 256, 0)
DllCall("dxva2\GetPhysicalMonitorsFromHMONITOR"
, "int", hMon ; monitor handle
, "uint", 1 ; monitor array size
, "int", &Physical_Monitor) ; point to array with monitor
return hPhysMon := NumGet(Physical_Monitor)
}
destroyMonitorHandle(handle)
{
DllCall("dxva2\DestroyPhysicalMonitor", "int", handle)
}
; Used to change the monitor source
; HDMI 1 = 17
; HDMI 2 = 18
; DP = 15
setMonitorInputSource(source)
{
handle := getMonitorHandle()
DllCall("dxva2\SetVCPFeature"
, "int", handle
, "char", 0x60 ;VCP code for Input Source Select
, "uint", source)
destroyMonitorHandle(handle)
}
; Gets Monitor source
getMonitorInputSource()
{
handle := getMonitorHandle()
DllCall("dxva2\GetVCPFeatureAndVCPFeatureReply"
, "int", handle
, "char", 0x60 ;VCP code for Input Source Select
, "Ptr", 0
, "uint*", currentValue
, "uint*", maximumValue)
destroyMonitorHandle(handle)
return currentValue
}
#IfWinActive
!m::
if(getMonitorInputSource() != 15)
setMonitorInputSource(15)
else
setMonitorInputSource(17)
return
;^!m::
;if(getMonitorInputSource() != 15)
; setMonitorInputSource(15)
;else
; setMonitorInputSource(18)
;return