Windows - automatische Computer Sperre aufheben

  • Hallo zusammen,

    ich bin mir sicher dass mein Problem hier schon öfters erörtert wurde, allerdings konnte ich immer noch keine passende Antwort für mich finden.
    Deshalb meine Frage:
    Wie kann ich meine Maussimulation laufen lassen, wenn das Windows "logonui.exe" aber gerade aktiv ist?

    Grund:
    Ich habe für ein Gerät in unserer Firma eine Maussimulation geschrieben, welches uns ermöglicht zwischen positiven und negativen LCMS-Läufen zu wechseln. Z.B.: wird direkt nach einem positiven Lauf ein Prozess gestartet, dass mein "switching-Programm" ausführen lässt! Nun sind unsere Sicherheitsbestimmungen in der Firma jedoch so, dass automatisch nach 15 Minuten der PC gesperrt wird, und ich mich mit dem Passwort des Users (User ist immer der gleiche!) wieder anmelden müsste.
    Und genau hier liegt das Problem. Ich weiß nicht, wie ich per AutoIt sagen soll, dass mein "switching-Program" erst prüfen soll, ob der PC gesperrt ist, und dann die Sperre wieder aufheben soll!!!
    Geht das überhaupt?

    Vielen Dank schonmal für eure Antworten.

    Gruß Melanie

  • Ich befürchte fast, ein gesperrter Desktop IST gesperrt - das heißt ein "normales" programm kommt an dem punkt nicht weiter (korrigiert mich wenn ich falsch liege)... Mein nächster gedanke wäre also dass du dein Script irgendwie zum Windows Dienst machen musst - nur hab ich keine Ahnung ob und wie das möglich ist.
    Da solltest du warten bis sich die Profis zu wort melden

  • Mhhh, und wenn ich das Programm als Dienst laufen lasse, funktioniert auch die Ansteuerung von Fenstern im gesperrten Modus???
    Im Prinzip fängt mein Programm auch so an zu laufen (höre ich an dem Soundfile, dass ich mit eingebunden habe), allerdings bewegt sich die Maus eben nicht mehr bei gesperrtem PC, und ich vermute dass er den Befehl "WinActivate" auch nicht mehr ausführen kann!

    Gruß

  • Zitat

    Mhhh, und wenn ich das Programm als Dienst laufen lasse, funktioniert auch die Ansteuerung von Fenstern im gesperrten Modus???

    nein das funktioniert meines wissens nicht

    Zitat

    und ich vermute dass er den Befehl "WinActivate" auch nicht mehr ausführen kann!

    genauso wie das nicht funktioniert...


    an deiner stelle würde ich soetwas basteln das aussieht als wäre der pc gesperrt

    oder du benutzt ein script von funkey. mit welchen man den monitor ausschalten kann. dann kannst du trotzdem alle befehle (mousemove winactivate usw) benutzen und bildschirm wieder aktivieren kannst du dir dann auf ne tastenkombination legen (sowas wie Shift + Alt + Strg + O, da kommt sowieso keiner drauf)

    wenn das in ordnung wäre kann ich dir gerne helfen

    edit: hab den link zum thread vergessen. hier is das script von funkey ;)
    Monitor zu bestimmten Zeiten ein- und ausschalten
    ;)

  • ok hier das veränderte script von funkey
    original thread: https://autoit.de/index.php?page=Thread&threadID=14461

    Veränderungen am Skript:
    mit Strg + Alt + F11 kann man nun den Zeitmodus an-/abschalten
    mit Strg + Alt + F12 kann man den monitor an-/abschalten

    Spoiler anzeigen
    [autoit]

    #cs ----------------------------------------------------------------------------

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

    AutoIt Version: 3.3.0.0
    Author: funkey
    Edited by: Schnitzel
    Official Thread: https://autoit.de/index.php?page=Thread&threadID=14461

    Script Function:
    En-/Disabling Monitor

    #ce ----------------------------------------------------------------------------

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

    #AutoIt3Wrapper_Res_LegalCopyright = ©funkey
    #AutoIt3Wrapper_Res_Fileversion = 2.0
    #AutoIt3Wrapper_Res_Description = Monitor-AutoStandby

    HotKeySet("^!{F11}", "_EnDisableCheck")
    HotKeySet("^!{F12}", "_EnDisableMonitor")

    Opt("TrayMenuMode", 1)
    Opt("TrayOnEventMode", 1)
    Opt('GUIOnEventMode', 1)

    Global Const $lciWM_SYSCommand = 274
    Global Const $lciSC_MonitorPower = 61808
    Global Const $lciPower_Off = 2
    Global Const $lciPower_On = -1

    Global $title= "Monitor-AutoStandby"
    Global $IniFile = @ScriptDir & '\Monitor-AutoStandby.ini'
    Global $aTime[14]

    Global $MonitorIsOff = False
    Global $EnableCheck = True

    GUICreate($title, 230, 280)
    GUISetOnEvent(-3, '_Exit')
    GUIRegisterMsg(0x004E, '_SaveTimes')

    GUICtrlCreateLabel('Monitor ein', 80, 10, 60, 20, 0x201)
    GUICtrlCreateLabel('Monitor aus', 150, 10, 60, 20, 0x201)

    GUICtrlCreateButton('Start', 70, 242, 90, 30)
    GUICtrlSetFont(-1, 16, 1000)
    GUICtrlSetOnEvent(-1, '_Start')

    For $i = 0 To 6
    GUICtrlCreateLabel(_Wochentag($i+1), 15, 30+30*$i, 60, 20, 0x200)
    $aTime[$i] = GUICtrlCreateDate(IniRead($IniFile, 'Ein', _Wochentag($i+1), "04:00"), 80, 30+30*$i, 60, 20, 0x09)
    GUICtrlSendMsg(-1, 0x1032, 0, "HH:mm")
    $aTime[$i+7] = GUICtrlCreateDate(IniRead($IniFile, 'Aus', _Wochentag($i+1), "20:00"), 150, 30+30*$i, 60, 20, 0x09)
    GUICtrlSendMsg(-1, 0x1032, 0, "HH:mm")
    Next

    TrayCreateItem('Einstellungen')
    TrayItemSetOnEvent(-1, '_Show')
    TrayCreateItem('')
    TrayCreateItem('Beenden')
    TrayItemSetOnEvent(-1, '_Exit')

    GUISetState()

    While 1
    Sleep(20000)
    WEnd

    Func _SaveTimes($hWnd, $Msg, $wParam, $lParam)
    $nNotifyCode = BitShift($wParam, 16)
    $nID = BitAND($wParam, 0x0000FFFF)
    $hCtrl = $lParam
    For $i = 0 To 6
    If $nID = $aTime[$i] Then
    IniWrite($IniFile, 'Ein', _Wochentag($i+1), GUICtrlRead($aTime[$i]))
    Return
    EndIf
    Next
    For $i = 7 To 13
    If $nID = $aTime[$i] Then
    IniWrite($IniFile, 'Aus', _Wochentag($i-6), GUICtrlRead($aTime[$i]))
    Return
    EndIf
    Next
    EndFunc

    Func _Start()
    GUISetState(@SW_HIDE)
    AdlibEnable('_Check', 500)
    EndFunc

    Func _Show()
    AdlibDisable()
    GUISetState(@SW_SHOW)
    EndFunc

    Func _Check()
    If $EnableCheck = True Then
    Local $Ein = IniRead($IniFile, 'Ein', _Wochentag(@WDAY), "04:00")
    Local $Hour_Ein = StringLeft($Ein, 2), $Min_Ein = StringRight($Ein, 2)
    Local $Aus = IniRead($IniFile, 'Aus', _Wochentag(@WDAY), "20:00")
    Local $Hour_Aus = StringLeft($Aus, 2), $Min_Aus = StringRight($Aus, 2)
    If $Ein = $Aus Then Return
    If @HOUR >= $Hour_Aus And @MIN >= $Min_Aus And $MonitorIsOff = False Then
    AdlibDisable()
    _Monitor_OFF()
    EndIf
    EndIf
    EndFunc

    Func _Wochentag($WDAY)
    Local $aWoTa[7] = ['Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag']
    Return $aWoTa[$WDAY -1]
    EndFunc

    Func _Monitor_ON()
    $MonitorIsOff = False
    Local $Progman_hwnd = WinGetHandle('[CLASS:Progman]')

    DllCall('user32.dll', 'int', 'SendMessage', _
    'hwnd', $Progman_hwnd, _
    'int', $lciWM_SYSCommand, _
    'int', $lciSC_MonitorPower, _
    'int', $lciPower_On)
    If $EnableCheck = True Then AdlibEnable('_Check', 500)
    EndFunc

    Func _Monitor_OFF()
    $MonitorIsOff = True
    Local $Progman_hwnd = WinGetHandle('[CLASS:Progman]')

    While $MonitorIsOff = True
    DllCall('user32.dll', 'int', 'SendMessage', _
    'hwnd', $Progman_hwnd, _
    'int', $lciWM_SYSCommand, _
    'int', $lciSC_MonitorPower, _
    'int', $lciPower_Off)
    _IdleWaitCommit(0)
    Sleep(20)
    WEnd
    EndFunc

    Func _IdleWaitCommit($idlesec)
    Local $iSave, $LastInputInfo = DllStructCreate ("uint;dword")
    DllStructSetData ($LastInputInfo, 1, DllStructGetSize ($LastInputInfo))
    DllCall ("user32.dll", "int", "GetLastInputInfo", "ptr", DllStructGetPtr ($LastInputInfo))
    Do
    $iSave = DllStructGetData ($LastInputInfo, 2)
    Sleep(60)
    DllCall ("user32.dll", "int", "GetLastInputInfo", "ptr", DllStructGetPtr ($LastInputInfo))

    Local $Ein = IniRead($IniFile, 'Ein', _Wochentag(@WDAY), "04:00")
    Local $Hour_Ein = StringLeft($Ein, 2), $Min_Ein = StringRight($Ein, 2)
    If @HOUR = $Hour_Ein And @MIN = $Min_Ein Then
    _Monitor_ON()
    EndIf

    Until (DllStructGetData ($LastInputInfo, 2)-$iSave) > $idlesec; Or $MonitorIsOff = False
    Return DllStructGetData ($LastInputInfo, 2)-$iSave
    EndFunc

    Func _Exit()
    _Monitor_ON()
    Exit
    EndFunc

    Func _EnDisableCheck()
    $EnableCheck = Not $EnableCheck
    MsgBox(0, "", "Zeitmodus: " & $EnableCheck)
    _Monitor_ON()
    EndFunc

    Func _EnDisableMonitor()
    $EnableCheck = False
    If $MonitorIsOff = True Then
    _Monitor_ON()
    Else
    _Monitor_OFF()
    EndIf
    EndFunc

    [/autoit]
  • Hallo !

    Ich bin leider ein kompletter Newbie, was AutoIt anbetrifft...aber nachdem ich hier genau das gefunden habe, was ich auch gesucht habe (die zeitgesteuerte Monitorschaltung), habe ich mich da ein wenig reingearbeitet.
    Habe das Script von funkey/Schnitzel auch probieren wollen und das ganze via SciTE ausgeführt. Dort erscheint aber immer folgende Fehlermeldung:

    >"C:\Programme\AutoIt3\SciTE\..\autoit3.exe" /ErrorStdOut "C:\...\monitorscript.au3"
    C:\...\monitorscript.au3 (87) : ==> Unknown function name.:
    AdlibEnable('_Check', 500)
    ^ ERROR
    >Exit code: 1 Time: 16.542

    Fehler treten auch auf, wenn ich das Script zu einer *.exe-Datei kompiliert habe ("Unknown Function Name").

    Somit funktioniert das Script leider bei mir nicht, obwohl ich es gerne einsetzen möchte.

    Hat jemand von euch vielleicht einen Tipp für mich ?

    Danke schonmal

    Gruß
    Mr_KARR

  • Hallo Mr_KARR,

    erst einmal hezlich willkommen im Forum und viel Spass mit AutoIt.

    Zitat

    Dort erscheint aber immer folgende Fehlermeldung:

    >"C:\Programme\AutoIt3\SciTE\..\autoit3.exe" /ErrorStdOut "C:\...\monitorscript.au3"
    C:\...\monitorscript.au3 (87) : ==> Unknown function name.:
    AdlibEnable('_Check', 500)
    ^ ERROR
    >Exit code: 1 Time: 16.542

    Fehler treten auch auf, wenn ich das Script zu einer *.exe-Datei kompiliert habe ("Unknown Function Name").

    Das liegt daran das in der Zwischenzeit ein neues Release von AutoIt erschienen ist, so dass das Skript muss an 3.3.4.0 angepasst werden muss:

    Spoiler anzeigen
    [autoit]

    #cs ----------------------------------------------------------------------------

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

    AutoIt Version: 3.3.0.0
    Author: funkey
    Edited by: Schnitzel
    Official Thread: https://autoit.de/index.php?page=Thread&threadID=14461

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

    Script Function:
    En-/Disabling Monitor

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

    #ce ----------------------------------------------------------------------------

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

    #AutoIt3Wrapper_Res_LegalCopyright = ©funkey
    #AutoIt3Wrapper_Res_Fileversion = 2.0
    #AutoIt3Wrapper_Res_Description = Monitor-AutoStandby

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

    HotKeySet("^!{F11}", "_EnDisableCheck")
    HotKeySet("^!{F12}", "_EnDisableMonitor")

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

    Opt("TrayMenuMode", 1)
    Opt("TrayOnEventMode", 1)
    Opt('GUIOnEventMode', 1)

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

    Global Const $lciWM_SYSCommand = 274
    Global Const $lciSC_MonitorPower = 61808
    Global Const $lciPower_Off = 2
    Global Const $lciPower_On = -1

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

    Global $title= "Monitor-AutoStandby"
    Global $IniFile = @ScriptDir & '\Monitor-AutoStandby.ini'
    Global $aTime[14]

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

    Global $MonitorIsOff = False
    Global $EnableCheck = True

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

    GUICreate($title, 230, 280)
    GUISetOnEvent(-3, '_Exit')
    GUIRegisterMsg(0x004E, '_SaveTimes')

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

    GUICtrlCreateLabel('Monitor ein', 80, 10, 60, 20, 0x201)
    GUICtrlCreateLabel('Monitor aus', 150, 10, 60, 20, 0x201)

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

    GUICtrlCreateButton('Start', 70, 242, 90, 30)
    GUICtrlSetFont(-1, 16, 1000)
    GUICtrlSetOnEvent(-1, '_Start')

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

    For $i = 0 To 6
    GUICtrlCreateLabel(_Wochentag($i+1), 15, 30+30*$i, 60, 20, 0x200)
    $aTime[$i] = GUICtrlCreateDate(IniRead($IniFile, 'Ein', _Wochentag($i+1), "04:00"), 80, 30+30*$i, 60, 20, 0x09)
    GUICtrlSendMsg(-1, 0x1032, 0, "HH:mm")
    $aTime[$i+7] = GUICtrlCreateDate(IniRead($IniFile, 'Aus', _Wochentag($i+1), "20:00"), 150, 30+30*$i, 60, 20, 0x09)
    GUICtrlSendMsg(-1, 0x1032, 0, "HH:mm")
    Next

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

    TrayCreateItem('Einstellungen')
    TrayItemSetOnEvent(-1, '_Show')
    TrayCreateItem('')
    TrayCreateItem('Beenden')
    TrayItemSetOnEvent(-1, '_Exit')

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

    GUISetState()

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

    While 1
    Sleep(20000)
    WEnd

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

    Func _SaveTimes($hWnd, $Msg, $wParam, $lParam)
    $nNotifyCode = BitShift($wParam, 16)
    $nID = BitAND($wParam, 0x0000FFFF)
    $hCtrl = $lParam
    For $i = 0 To 6
    If $nID = $aTime[$i] Then
    IniWrite($IniFile, 'Ein', _Wochentag($i+1), GUICtrlRead($aTime[$i]))
    Return
    EndIf
    Next
    For $i = 7 To 13
    If $nID = $aTime[$i] Then
    IniWrite($IniFile, 'Aus', _Wochentag($i-6), GUICtrlRead($aTime[$i]))
    Return
    EndIf
    Next
    EndFunc

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

    Func _Start()
    GUISetState(@SW_HIDE)
    AdlibRegister('_Check', 500)
    EndFunc

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

    Func _Show()
    AdlibUnRegister()
    GUISetState(@SW_SHOW)
    EndFunc

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

    Func _Check()
    If $EnableCheck = True Then
    Local $Ein = IniRead($IniFile, 'Ein', _Wochentag(@WDAY), "04:00")
    Local $Hour_Ein = StringLeft($Ein, 2), $Min_Ein = StringRight($Ein, 2)
    Local $Aus = IniRead($IniFile, 'Aus', _Wochentag(@WDAY), "20:00")
    Local $Hour_Aus = StringLeft($Aus, 2), $Min_Aus = StringRight($Aus, 2)
    If $Ein = $Aus Then Return
    If @HOUR >= $Hour_Aus And @MIN >= $Min_Aus And $MonitorIsOff = False Then
    AdlibUnRegister()
    _Monitor_OFF()
    EndIf
    EndIf
    EndFunc

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

    Func _Wochentag($WDAY)
    Local $aWoTa[7] = ['Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag']
    Return $aWoTa[$WDAY -1]
    EndFunc

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

    Func _Monitor_ON()
    $MonitorIsOff = False
    Local $Progman_hwnd = WinGetHandle('[CLASS:Progman]')

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

    DllCall('user32.dll', 'int', 'SendMessage', _
    'hwnd', $Progman_hwnd, _
    'int', $lciWM_SYSCommand, _
    'int', $lciSC_MonitorPower, _
    'int', $lciPower_On)
    If $EnableCheck = True Then AdlibRegister('_Check', 500)
    EndFunc

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

    Func _Monitor_OFF()
    $MonitorIsOff = True
    Local $Progman_hwnd = WinGetHandle('[CLASS:Progman]')

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

    While $MonitorIsOff = True
    DllCall('user32.dll', 'int', 'SendMessage', _
    'hwnd', $Progman_hwnd, _
    'int', $lciWM_SYSCommand, _
    'int', $lciSC_MonitorPower, _
    'int', $lciPower_Off)
    _IdleWaitCommit(0)
    Sleep(20)
    WEnd
    EndFunc

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

    Func _IdleWaitCommit($idlesec)
    Local $iSave, $LastInputInfo = DllStructCreate ("uint;dword")
    DllStructSetData ($LastInputInfo, 1, DllStructGetSize ($LastInputInfo))
    DllCall ("user32.dll", "int", "GetLastInputInfo", "ptr", DllStructGetPtr ($LastInputInfo))
    Do
    $iSave = DllStructGetData ($LastInputInfo, 2)
    Sleep(60)
    DllCall ("user32.dll", "int", "GetLastInputInfo", "ptr", DllStructGetPtr ($LastInputInfo))

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

    Local $Ein = IniRead($IniFile, 'Ein', _Wochentag(@WDAY), "04:00")
    Local $Hour_Ein = StringLeft($Ein, 2), $Min_Ein = StringRight($Ein, 2)
    If @HOUR = $Hour_Ein And @MIN = $Min_Ein Then
    _Monitor_ON()
    EndIf

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

    Until (DllStructGetData ($LastInputInfo, 2)-$iSave) > $idlesec; Or $MonitorIsOff = False
    Return DllStructGetData ($LastInputInfo, 2)-$iSave
    EndFunc

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

    Func _Exit()
    _Monitor_ON()
    Exit
    EndFunc

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

    Func _EnDisableCheck()
    $EnableCheck = Not $EnableCheck
    MsgBox(0, "", "Zeitmodus: " & $EnableCheck)
    _Monitor_ON()
    EndFunc

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

    Func _EnDisableMonitor()
    $EnableCheck = False
    If $MonitorIsOff = True Then
    _Monitor_ON()
    Else
    _Monitor_OFF()
    EndIf
    EndFunc

    [/autoit]

    so lässt es sich fehlefrei kompilieren und ausführen (AdlibEnable => Adlib Register, AdlibDisable => AdlibUndregister). Auf meinem Netbook kann ich die Funktonalität aber nicht testen,

    mfg (Auto)Bert