hi,
hat jemand ne idee wie ich abfragen kann ob der bildschirmschoner bzw. die bildschirmsperre aktiv ist ?
gruß
markus
hi,
hat jemand ne idee wie ich abfragen kann ob der bildschirmschoner bzw. die bildschirmsperre aktiv ist ?
gruß
markus
HotKeySet("{Esc}", "Quit")
While 1
Sleep(100)
If isScreensaverOn() Then
MsgBox(0, "", "It is on!")
Exit (0)
EndIf
WEnd
Func isScreensaverOn()
; 1 = on , 0 = off
Local $list = ProcessList()
For $i = 1 To $list[0][0]
If StringInStr($list[$i][0], ".scr") Then Return 1
Next
Return 0
EndFunc ;==>isScreensaverOn
Func Quit()
Exit
EndFunc ;==>Quit
Global Const $DESKTOP_ENUMERATE = 0x40
Global Const $SPI_GETSCREENSAVERRUNNING = 114
Global Const $DESKTOP_SWITCHDESKTOP = 0x100
HotKeySet("{ESC}", "_Terminate")
AdlibRegister("IsDeskTopLocked", 500)
While 1
Sleep(10)
WEnd
Func IsDeskTopLocked()
Local $p_lngHwnd, $p_lngRtn, $p_lngErr, $p_lngScreenSaver, $p_blnIsScreenSaver
;~ ' ------------------------------------------
;~ ' First check for screen saver one of 2 ways,
;~ ' based of OS
;~ ' ------------------------------------------
If @OSTYPE = "WIN32_WINDOWS" Then
;~ ' ---------------------------------------
;~ ' Pre W2K -- Note, will only be TRUE if
;~ ' the "Password Protected" box is
;~ ' checked.
;~ ' ---------------------------------------
$p_lngHwnd = DllCall("user32.dll", "int", "OpenDesktopA", "str", "screen-saver", "int", 0, "int", False, "int", $DESKTOP_ENUMERATE)
If $p_lngHwnd[0] <> 0 Then
$p_blnIsScreenSaver = True
Else
$p_blnIsScreenSaver = False
EndIf
Else
;~ ' ---------------------------------------
;~ ' W2K+ -- Will determine if screen saver
;~ ' is running whether or not the
;~ ' "Password Protected" box is checked
;~ ' ---------------------------------------
$p_lngRtn = DllCall("user32.dll", "int", "SystemParametersInfoA", "int", $SPI_GETSCREENSAVERRUNNING, "int", 0, "int", $p_lngScreenSaver, "int", 0)
If $p_lngRtn[0] = 0 Then
ConsoleWrite("+>Error detecting screen saver" & @LF)
Else
$p_blnIsScreenSaver = $p_lngScreenSaver
EndIf
EndIf
[/autoit] [autoit][/autoit] [autoit];~ ' ------------------------------------------
;~ ' If screen saver is *not* running, then
;~ ' check for locked workstation
;~ ' ------------------------------------------
If $p_blnIsScreenSaver Then
If @OSTYPE = "WIN32_WINDOWS" Then
ConsoleWrite("Screen saver is running..., Handle #" & $p_lngHwnd[0] & @LF)
$p_lngHwnd = DllCall("user32.dll", "int", "CloseDesktop", "int", $p_lngHwnd[0])
Else
ConsoleWrite("Screen saver is running on W2K+" & @LF)
EndIf
Else
$p_lngHwnd = DllCall("user32.dll", "int", "OpenDesktopA", "str", "Default", "int", 0, "int", False, "int", $DESKTOP_SWITCHDESKTOP)
If $p_lngHwnd[0] = 0 Then
ConsoleWrite("Error with OpenDesktop" & @LF)
Else
$p_lngRtn = DllCall("user32.dll", "int", "SwitchDesktop", "int", $p_lngHwnd[0])
$p_lngErr = _GetLastErrorMessage()
If $p_lngRtn[0] = 0 Then
If $p_lngErr = 0 Then
ConsoleWrite("! Desktop is locked" & @LF)
Else
ConsoleWrite("Error with SwitchDesktop" & @LF)
EndIf
Else
ConsoleWrite("Not locked!" & @LF)
EndIf
$p_lngHwnd = DllCall("user32.dll", "int", "CloseDesktop", "int", $p_lngHwnd[0])
[/autoit] [autoit][/autoit] [autoit]EndIf
EndIf
EndFunc ;==>IsDeskTopLocked
Func _Terminate()
Exit
EndFunc ;==>_Terminate
;===============================================
; _GetLastErrorMessage($DisplayMsgBox="")
; Format the last windows error as a string and return it
; if $DisplayMsgBox <> "" Then it will display a message box w/ the error
; Return Window's error as a string
;===============================================
Func _GetLastErrorMessage($DisplayMsgBox = "")
Local $ret, $s
Local $p = DllStructCreate("char[4096]")
Local Const $FORMAT_MESSAGE_FROM_SYSTEM = 0x00001000
If @error Then Return ""
[/autoit] [autoit][/autoit] [autoit]$ret = DllCall("Kernel32.dll", "int", "GetLastError")
[/autoit] [autoit][/autoit] [autoit]$ret = DllCall("kernel32.dll", "int", "FormatMessage", _
"int", $FORMAT_MESSAGE_FROM_SYSTEM, _
"ptr", 0, _
"int", $ret[0], _
"int", 0, _
"ptr", DllStructGetPtr($p), _
"int", 4096, _
"ptr", 0)
$s = DllStructGetData($p, 1)
If $DisplayMsgBox <> "" Then MsgBox(0, "_GetLastErrorMessage", $DisplayMsgBox & @CRLF & $s)
Return $s
EndFunc ;==>_GetLastErrorMessage
Das ging ja schnell ! Danke genau das was ich gesucht habe ...
Gruß
Markus
Kein problem, hatte ich irgendwo in der Sammlung