Monitor Frage

  • Hallo Comunity

    Weiss jemand eine möglichkeit, wie man herausfinden kann, ob ein Monitor eingeschaltet ist??

    Also Power ON.

    Ich will nicht wissen, was auf dem Bildschrim steht, ich will wissen, ob ein Bildschirm angeschlossen ist und ob er auch eingeschaltet ist.

    Bin für jede Hilfe dankbar.


    Gruss Roger

    Einmal editiert, zuletzt von RogerSt (24. April 2009 um 09:07)

  • funky:

    Nein, ich will 2 Msgboxen aufpopen lassen. :) (Manchmal muss man einfach weiterdenken und schon kommt man auf Ideen)

    Wenn du z.B. eine Telefon Software hast, wo man sich anmeldet, kann man die Leute abmelden, die dem PC am Abend nicht runterfahren.


    Danke an alle für die Antworten.


    Gruss Roger

  • Hab was gefunden. Ob es so funktioniert wie es soll weiß ich nicht.

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    $sMsg = ""
    $aNames = _MoniterEnumNames ()
    For $x = 1 To $aNames[0]
    $nState = _MoniterGetState ($aNames[$x])
    Select
    Case $nState = 17
    $sMsg &= @TAB & "- Power Save - Warning (The device is in a warning state, though also in a power save mode.)" & @CR
    Case $nState = 16
    $sMsg &= @TAB & "- Power Cycle" & @CR
    Case $nState = 15
    $sMsg &= @TAB & "- Power Save - Standby (The device is not functioning, but could be brought to full power quickly.)" & @CR
    Case $nState = 14
    $sMsg &= @TAB & "- Power Save - Low Power Mode (The device is in a power save state but still functioning, and may exhibit degraded performance.)" & @CR
    Case $nState = 13
    $sMsg &= @TAB & "- Power Save - Unknown (The device is known to be in a power save mode, but its exact status is unknown)" & @CR
    Case $nState = 12
    $sMsg &= @TAB & "- Install Error" & @CR
    Case $nState = 11
    $sMsg &= @TAB & "- Not Installed" & @CR
    Case $nState = 10
    $sMsg &= @TAB & "- Degraded" & @CR
    Case $nState = 9
    $sMsg &= @TAB & "- Off Duty" & @CR
    Case $nState = 8
    $sMsg &= @TAB & "- Off Line" & @CR
    Case $nState = 7
    $sMsg &= @TAB & "- Power Off" & @CR
    Case $nState = 6
    $sMsg &= @TAB & "- Not Applicable" & @CR
    Case $nState = 5
    $sMsg &= @TAB & "- In Test" & @CR
    Case $nState = 4
    $sMsg &= @TAB & "- Warning" & @CR
    Case $nState = 3
    $sMsg &= @TAB & "- Running or Full Power" & @CR
    Case $nState = 2
    $sMsg &= @TAB & "- Unknown" & @CR
    Case $nState = 1
    $sMsg &= @TAB & "- Other" & @CR
    EndSelect
    MsgBox (0, "Display Results", "Moniter Name = " & $aNames[$x] & @CR & _
    "Moniter State = " & $nState & @CR & _
    "Moniter State Meaning: " & @CR & $sMsg)
    Next

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _MoniterGetState($name)
    Local $cI_CompName = @ComputerName
    Local $wbemFlagReturnImmediately = 0x10;DO NOT CHANGE
    Local $wbemFlagForwardOnly = 0x20;DO NOT CHANGE


    $objWMIService = ObjGet("winmgmts:\\" & $cI_CompName & "\root\CIMV2")

    $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_DesktopMonitor", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
    If IsObj($colItems) Then
    For $objItem In $colItems
    ConsoleWrite ($objItem.Name & @CRLF)
    If $name = $objItem.Name Then
    Return $objItem.Availability
    EndIf
    Next
    EndIf
    Return -1
    EndFunc ;==>_MoniterGetState

    [/autoit] [autoit][/autoit] [autoit]

    Func _MoniterEnumNames ()
    Local $cI_CompName = @ComputerName
    Local $wbemFlagReturnImmediately = 0x10;DO NOT CHANGE
    Local $wbemFlagForwardOnly = 0x20;DO NOT CHANGE
    Local $i = 1
    Local $rArray[1]


    $objWMIService = ObjGet("winmgmts:\\" & $cI_CompName & "\root\CIMV2")

    $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_DesktopMonitor", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
    If IsObj($colItems) Then
    For $objItem In $colItems
    ReDim $rArray[$i + 1]
    $rArray[$i] = $objItem.Name
    $i += 1
    Next
    EndIf
    $rArray[0] = UBound ($rArray) - 1
    Return $rArray
    EndFunc

    [/autoit]
  • Nur noch zur Info


    Leider hats nicht funktioniert, um rauszufinden, ob ein Monitor läuft oder nicht.


    Ich habe aber eine Funktion gefunden, mit der ich feststellen kann, ob der Bildschirm gesperrt ist oder nicht.

    So konnte ich mein Programmtechnisches problem lösen.


    Hier noch die Funktion, die ich aus einem Forum habe. (Weiss aber nicht mehr welches)


    Spoiler anzeigen


    Func _IsLocked()
    $hDesktop = DllCall("User32.dll", "int", "OpenDesktop", "str", "Default", "int", 0, "int", 0, "int", $DESKTOP_SWITCHDESKTOP)
    $ret = DllCall("User32.dll", "int", "SwitchDesktop", "int", $hDesktop[0])
    DllCall("User32.dll", "int", "CloseDesktop", "int", $ret[0])

    If $ret[0] Then
    Return SetError(0, 0, 0)
    Else
    Return SetError(0, 0, 1)
    EndIf
    EndFunc ;==>_IsLocked


    Gruss Roger

  • Nur noch zur Info

    Leider hats nicht funktioniert, um rauszufinden, ob ein Monitor läuft oder nicht.

    Auch nicht per DDC? Daß es über die Abfrage der "Energiespar" Einstellungen nicht gehen kann ist klar, aber über eine direkte Monitor-Verbindung ?( - außer der Monitor ist schon soooo alt ...