PC für X Minuten sperren nach AutoLogin

  • Moin zusammen!

    Zuerst: ich bin im Bereich AutoIt absoluter Neuling aber mit Sicherheit nicht zu faul, die Suche bzw. das Wiki zu lesen. In meiner eigentlichen Eigenschaft bin ich Admin eines mittelgroßen Netzes und kein klassischer Coder, von daher bitte ich um Nachsicht :D

    Ich bin auf der Suche nach einer Möglichkeit, einen XP Pro Client, welcher mittels AutoLogin startet (User hat Adminrechte), unmittelbar nach dem Login für jegliche Eingaben zu sperren. Grund: während des Starts wird mittels Autostart die Simatic-Soft von Siemens gestartet, was mitunter schonmal 5 Minuten dauern kann. In dieser Zeit soll es dem User nicht möglich sein, Programme aufzurufen oder sonstwie den Programmstart zu stören. Das die einfache LockWorkstation-Variante via RUNDLL nicht greift, ergibt sich aus der Tatsache, daß der User ja (leider) Adminrechte hat und das PW bekannt ist.

    Ideal wäre nun ein Skript, welches (via Autostart oder Registryeintrag aufgerufen) ein kleines Fenster mit Timer aufpoppt und den User sperrt. Ein Feld für eine Paßworteingabe wäre natürlich Luxus :rolleyes:

    Wenn mir jemand hier helfen könnte, revanchiere ich mich gerne.

    Besten Dank schonmal im voraus

    Grüße

  • Moin,

    vielleicht hilft das schon mal weiter:

    Spoiler anzeigen
    [autoit]


    ; Include für die GUI
    #include <GUIConstants.au3>

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

    ;Gui erstellen
    $hGUI = GUICreate("GDI+", 260, 25, -1,-1, BitOR($WS_POPUP,$DS_SETFOREGROUND),$WS_EX_TOOLWINDOW)
    $label = GUICtrlCreateLabel("Gespeert für 15 Sekunden",10,5,250)
    GUISetState()

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

    ; Wie lange die Sperre aktiv sein soll in Sekunden
    $sperreinsekunden = 15

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

    ;Eingaben blocken
    BlockInput(1)

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

    ; Ticks abspeichern
    $start = TimerInit()

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

    Do
    $zeit = TimerDiff($start) ;aktuelle differenz in ms
    GUICtrlSetData($label,"Der Bildschirm ist noch gespert für: " & $sperreinsekunden - Round($zeit/1000) & " Sekunden.") ;Textausgabe
    Sleep(900); warten
    Until $zeit >= $sperreinsekunden * 1000 ;Prüfen ob die Sperre gleich oder größer der angegebenen Zeit ist

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

    ; Rechner wieder frei geben
    BlockInput(0)

    [/autoit]

    Mfg
    Jens (McPoldy)

    Twitter: jkroeger

    Denn die Dinge, die wir erst lernen müssen, bevor wir sie tun, lernen wir beim Tun.(Aristoteles)

  • Das auch: [ offen ] Bildschirm verdunkeln
    Das Script hier nochmal in einer neuen Version:

    Spoiler anzeigen
    [autoit]

    #cs
    Name: Lock_Windows.au3
    Creator: Prog@ndy
    Function: Locks Windows until the right password is given
    Requires: WinLockDll.dll
    Optional:
    2 Images:
    - Locked.gif, 100 x 100 pixels
    - pw.gif 200 x 100 pixels
    #ce
    #cs
    ' Functions inside the DLL
    Private Declare Function Desktop_Show_Hide Lib "WinLockDll.dll" (ByVal bShowHide As Boolean) As Integer
    Private Declare Function StartButton_Show_Hide Lib "WinLockDll.dll" (ByVal bShowHide As Boolean) As Integer
    Private Declare Function Taskbar_Show_Hide Lib "WinLockDll.dll" (ByVal bShowHide As Boolean) As Integer
    Private Declare Function Clock_Show_Hide Lib "WinLockDll.dll" (ByVal bShowHide As Boolean) As Integer
    Private Declare Function Process_Desktop Lib "WinLockDll.dll" (ByVal szDesktopName As String, ByVal szPath As String) As Integer
    Private Declare Function Keys_Enable_Disable Lib "WinLockDll.dll" (ByVal bEnableDisable As Boolean) As Integer
    Private Declare Function AltTab1_Enable_Disable Lib "WinLockDll.dll" (ByVal bEnableDisable As Boolean) As Integer
    Private Declare Function AltTab2_Enable_Disable Lib "WinLockDll.dll" (ByVal hWnd As Long, ByVal bEnableDisable As Boolean) As Integer
    Private Declare Function TaskSwitching_Enable_Disable Lib "WinLockDll.dll" (ByVal bEnableDisable As Boolean) As Integer
    Private Declare Function TaskManager_Enable_Disable Lib "WinLockDll.dll" (ByVal bEnableDisable As Boolean) As Integer
    Private Declare Function CtrlAltDel_Enable_Disable Lib "WinLockDll.dll" (ByVal bEnableDisable As Boolean) As Integer
    #ce

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

    #include <GuiConstants.au3>
    $winlockdll = DllOpen("winlockdll.dll")
    DllCall($winlockdll,"int","AltTab1_Enable_Disable","int",0)
    DllCall($winlockdll,"int","CtrlAltDel_Enable_Disable","int",0)
    DllCall($winlockdll,"int","Desktop_Show_Hide","int",0)
    DllCall($winlockdll,"int","Taskbar_Show_Hide","int",0)
    DllCall($winlockdll,"int","TaskSwitching_Enable_Disable","int",0)
    DllCall($winlockdll,"int","TaskManager_Enable_Disable","int",0)
    $gui = GUICreate("",@DesktopWidth+5,@DesktopHeight+5,-5,-5,0x80000000,0x00000080);$WS_POPUP , $WS_EX_TOOLWINDOW
    GUISetBkColor(0x0)
    WinSetOnTop($gui,"",1)
    WinSetTrans($gui,"",25)
    GUISetState()
    Sleep(100)
    WinSetTrans($gui,"",50)
    GUISetState()
    Sleep(100)
    WinSetTrans($gui,"",75)
    GUISetState()
    Sleep(100)
    WinSetTrans($gui,"",100)
    GUISetState()
    Sleep(100)
    WinSetTrans($gui,"",125)
    GUISetState()
    Sleep(100)
    WinSetTrans($gui,"",150)
    GUISetState()
    Sleep(100)
    WinSetTrans($gui,"",180)
    GUISetState()
    Sleep(100)
    $popup = GUICreate("Computer gesperrt",300,300, -1, -1, "0x80000000", $WS_EX_TOPMOST)

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

    $id_progress1=GUICtrlCreateProgress(0,0,300,30,-1,-1)
    $id_progress2=GUICtrlCreateProgress(0,270,300,30,-1,-1)
    $id_pic3=GUICtrlCreatePic("Locked.gif",0,30,100,100,-1,-1)
    $id_pic4=GUICtrlCreatePic("pw.gif",100,30,200,100,-1,-1)
    $id_label5=GUICtrlCreateLabel("Passwort eingeben:",10,174,101,13,-1,-1)
    $Input_1=GUICtrlCreateInput("",120,170,170,22,-1,-1)
    $Button_2=GUICtrlCreateButton("ENTSPERREN",65,226,159,34,-1,-1)
    GUISetState(@sw_show)
    While 1
    If Not WinActive("Computer gesperrt") Then
    WinActivate ("Computer gesperrt")
    ;GUISetStyle(-1, $WS_EX_TOPMOST)
    ;Beep(500,100)
    WinClose ("Task-Manager")
    EndIf
    $msg2 = GUIGetMsg()
    Select
    Case $msg2 = $Button_2
    If GUICtrlRead($Input_1) = "passwort" Then
    ExitLoop
    EndIf
    Case $msg2 = $Input_1
    If GUICtrlRead($Input_1) = "passwort" Then
    ExitLoop
    EndIf
    Case Else
    ;;;
    EndSelect
    WEnd
    GUIDelete($popup)
    #cs
    $popup = GUICreate("PopUP", 191, 85, -1, -1, $WS_DLGFRAME, $WS_EX_TOPMOST)

    $Input_1 = GUICtrlCreateInput("Input1", 0, 0, 180, 20)
    $Button_2 = GUICtrlCreateButton("OK", 60, 40, 60, 20)

    GUISetState()
    While 1
    If Not WinActive("PopUP") Then
    GUISetStyle(-1, $WS_EX_TOPMOST)
    Beep(500,100)
    EndIf
    $msg2 = GUIGetMsg()
    Select
    Case $msg2 = $Button_2
    ExitLoop
    Case Else
    ;;;
    EndSelect
    WEnd
    GUIDelete($popup)
    #ce
    ;MsgBox(262144,"","So geht es zunot..ok > close");MsgBox Set OnTop (262144)
    Sleep(300)
    WinSetTrans($gui,"",125)
    GUISetState()
    Sleep(100)
    WinSetTrans($gui,"",100)
    GUISetState()
    Sleep(100)
    WinSetTrans($gui,"",50)
    GUISetState()
    Sleep(100)
    DllCall($winlockdll,"int","Desktop_Show_Hide","int",1)
    DllCall($winlockdll,"int","Taskbar_Show_Hide","int",1)
    DllCall($winlockdll,"int","TaskSwitching_Enable_Disable","int",1)
    DllCall($winlockdll,"int","TaskManager_Enable_Disable","int",1)
    DllCall($winlockdll,"int","AltTab1_Enable_Disable","int",1)
    DllCall($winlockdll,"int","CtrlAltDel_Enable_Disable","int",1)
    DllClose($winlockdll)

    [/autoit]
    • Offizieller Beitrag

    Hallo,

    ich kenne die Simantic-Software nicht, aber vllt. kann Du sie über Computerrichtline->Windows-Einstellungen->Scripts->Starten (wenn die Software lokal gestartet werden kann) oder über Benutzerrichtlinie->Windows->Einstellungen->Scripts->Anmelden (wenn Netzzugriff für die Software benötigt wird) starten. Dann kann der User erst arbeiten wenn das Programm gestartet ist.

  • Das ist doch alles viel zu aufwendig, so geht's einfacher:

    [autoit]

    AdlibEnable("block", 20)
    Func block()
    BlockInput(1)
    ProcessClose("taskmgr.exe")
    If ProcessExists ( "S5???.exe" ) then ;Hier latürnich den passenden Namen eintragen
    AdlibDisable()
    BlockInput(0)
    EndIf
    EndFunc

    [/autoit]


    Übrigens, PCS7 undWinCC ist aktuell, wenn auch nicht vergleichbar. ;)
    Gruß
    Westi

  • Zitat

    If ProcessExists ( "S5???.exe" ) then ;Hier latürnich den passenden Namen eintragen

    Existiert der Prozess nicht schon vonAnfang an ?

  • Wow, erst einmal ein fettes Dankeschön an alle hier für die Tipps, Beispiele und Hilfestellungen :thumbup:

    Habe noch nicht alle Varianten ausprobiert, insbesondere die Richtliniengeschichte, da man von der Entwicklungsabteilung, die den Siemenskram progged, nur alle Jubeljahre Infos bekommt.

    Am Montag weiß ich aber Näheres und sag nochmal Beschoid 8)