Hallo,
wenn ich folgendes Skript über eine Verknüpfung starte oder als kompilierte exe Datei, dann bricht das Programm mit der Fehlermeldung ab:
Test Monitorauflösung.exe funktioniert nicht mehr
Ein Problem hat die richtige Ausführung dieses Programms verhindert. Schließen Sie das Programm.
Starte ich das Programm hingegen aus dem Editor, funktioniert es problemlos.
Wahrscheinlich verträgt sich irgendein DLL Aufruf unter Windows 8/64 nicht?
(1) ist im Skript eventuell ein Fehler enthalten?
(2) wie kann man unter Windows 8/64 alternativ die Monitor Auflösung jedes einzelnen Monitors ermitteln, wenn mehrere Monitore an die Grafikkarte angeschlossen sind?
AutoIt
$a_Monitor_Anzahl_Aufloesung = _Funktion_Monitore_Aufloesung_() ; Auflösung aller Monitore
Global $Monitor_1_Desktop_Breite = $a_Monitor_Anzahl_Aufloesung[1][0]
Global $Monitor_1_Desktop_Hoehe = $a_Monitor_Anzahl_Aufloesung[1][1]
Global $Monitor_2_Desktop_Breite = $a_Monitor_Anzahl_Aufloesung[2][0]
Global $Monitor_2_Desktop_Hoehe = $a_Monitor_Anzahl_Aufloesung[2][1]
$msg_01 = $Monitor_1_Desktop_Breite & @CRLF & "($Monitor_1_Desktop_Breite)" & @CRLF
$msg_02 = $Monitor_1_Desktop_Hoehe & @CRLF & "($Monitor_1_Desktop_Hoehe)" & @CRLF
$msg_03 = $Monitor_2_Desktop_Breite & @CRLF & "($Monitor_2_Desktop_Breite)" & @CRLF
$msg_04 = $Monitor_2_Desktop_Hoehe & @CRLF & "($Monitor_2_Desktop_Hoehe)" & @CRLF
$msg = $msg_01 & @CR & $msg_02 & @CR & $msg_03 & @CR & $msg_04
MsgBox (262144, "Zeile " & @ScriptLineNumber & " - " & @ScriptName, $msg)
; - » - Funktion - --- --- --- --------------------------------------------------------------------------
Func _Funktion_Monitore_Aufloesung_() ; Auflösung aller Monitore
ConsoleWrite (@ScriptLineNumber & @TAB & "Funktion = " & "Monitore_Aufloesung" & @CRLF)
Local $cbMonitorEnumProc = DllCallbackRegister("MonitorEnumProc", "ubyte", "ptr;ptr;ptr;int")
If @error Then Return SetError(1, 0, False)
Local $strctCount = DllStructCreate("uint Count;uint Width[12];uint Height[12];int left[12];int top[12]")
If @error Then Return SetError(2, @error, False)
Local $iCount
DllStructSetData($strctCount, "Count", 0)
$Ret = DllCall("User32.dll", "ubyte","EnumDisplayMonitors","ptr", 0,"ptr", 0, "ptr", DllCallbackGetPtr($cbMonitorEnumProc), "ptr", DllStructGetPtr($strctCount))
If @error Or $Ret[0] = 0 Then Return SetError(3, @error, False)
DllCallbackFree($cbMonitorEnumProc)
$iCount = Int(DllStructGetData($strctCount, "Count"))
Local $aMonitors[$iCount+1][4] = [[$iCount]]
For $i = 1 To $iCount
$aMonitors[$i][0] = Int(DllStructGetData($strctCount, "Width",$i))
$aMonitors[$i][1] = Int(DllStructGetData($strctCount, "Height",$i))
$aMonitors[$i][2] = Int(DllStructGetData($strctCount, "left",$i))
$aMonitors[$i][3] = Int(DllStructGetData($strctCount, "top",$i))
Next
Return $aMonitors
EndFunc
Func MonitorEnumProc($hMonitor, $hdcMonitor, $lprcMonitor, $dwData)
Local $strctRECT = DllStructCreate("long left;long top;long right;long bottom", $lprcMonitor)
Local $strctCount = DllStructCreate("uint Count;uint Width[12];uint Height[12];int left[12];int top[12]", $dwData)
Local $iNumber = DllStructGetData($strctCount, "Count")
Local $Height = Int(DllStructGetData($strctRECT, "bottom"))-Int(DllStructGetData($strctRECT, "top"))
Local $Width = Int(DllStructGetData($strctRECT, "right"))-Int(DllStructGetData($strctRECT, "left"))
DllStructSetData($strctCount, "Width", $Width, $iNumber+1)
DllStructSetData($strctCount, "Height", $Height, $iNumber+1)
DllStructSetData($strctCount, "left", Int(DllStructGetData($strctRECT, "left")), $iNumber+1)
DllStructSetData($strctCount, "top", Int(DllStructGetData($strctRECT, "top")), $iNumber+1)
DllStructSetData($strctCount, "Count", $iNumber+1)
Return True
EndFunc
Alles anzeigen
Danke