Desktopsperre per USB-Stick

  • So ich hab mal ein InputFeld für ein Passwort hinzugefügt, falls man mal den USB-Stick nicht findet:

    Spoiler anzeigen
    [autoit]

    ;~ #RequireAdmin
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_icon=Desktopsperre.ico
    #AutoIt3Wrapper_outfile=Desktopsperre.exe
    #AutoIt3Wrapper_Compression=4
    #AutoIt3Wrapper_Res_Fileversion=1.2.0.0
    #AutoIt3Wrapper_Res_LegalCopyright=Oscar
    #AutoIt3Wrapper_Res_Language=1031
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #NoTrayIcon
    #include <StaticConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <MenuConstants.au3>
    #include <SendMessage.au3>
    #include <WindowsConstants.au3>
    #include <Misc.au3>

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

    Opt('GUIOnEventMode', 1)

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

    Global $sTitle = 'Desktopsperre v1.2'
    If _Singleton($sTitle, 1) = 0 Then
    MsgBox(48, "Error " & $sTitle, 'Das Programm läuft bereits!')
    Exit
    EndIf
    Global $Password = "Password"
    Global $sIni = @ScriptDir & '\Desktopsperre.ini'
    If Not IsDeclared('WM_DEVICECHANGE') Then Global Const $WM_DEVICECHANGE = 0x0219
    Global Const $Off = 2, $On = -1
    Global $hMonitor = WinGetHandle('classname=Progman')
    Global $startmenu = WinGetHandle("[class:DV2ControlHost]")
    $taskbar_pos = WinGetPos("[class:Shell_TrayWnd]")
    Global $bLock = False
    Global $usbstor = 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\usbstor\Enum'
    RegRead($usbstor, 'count')
    If @error Then Exit MsgBox(48, "Error " & $sTitle, 'Konnte Registryeintrag nicht lesen!')

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

    Global $sID = IniRead($sIni, 'ID', '1', '')
    If $sID = '' Then _RegID()
    ;~ TraySetIcon(@ScriptDir & '\Desktopsperre.ico')
    ;~ TrayCreateItem('USB-Stick registrieren')
    ;~ TrayItemSetOnEvent(-1, '_RegID')
    ;~ TrayCreateItem('')
    ;~ TrayCreateItem('Programm beenden')
    ;~ TrayItemSetOnEvent(-1, '_End')

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

    $hGui = GUICreate($sTitle, 0, 0, 0, 0, $WS_POPUP, $WS_EX_TOOLWINDOW)
    GUISetBkColor(0x000000, $hGui)

    $Label1 = GUICtrlCreateLabel('GESPERRT', @DesktopWidth/2-160, @DesktopHeight/2-110, 320, 60, $SS_CENTER)
    GUICtrlSetFont($Label1, 42, 600, 0, 'Arial')
    GUICtrlSetColor($Label1, 0xEE4444)
    GUICtrlSetBkColor($Label1, $GUI_BKCOLOR_TRANSPARENT)

    $Label2 = GUICtrlCreateLabel("Bitte stecken sie den registrierten USB-Stick oder geben Sie ein gültiges Passwort ein, um die Sperre aufzuheben", @DesktopWidth/2-160, @DesktopHeight/2-40, 320, 60, $SS_CENTER)
    GUICtrlSetFont($Label2, 12, 600, 0, 'Arial')
    GUICtrlSetColor($Label2, 0xEE4444)
    GUICtrlSetBkColor($Label2, $GUI_BKCOLOR_TRANSPARENT)

    $PasswordInput = GUICtrlCreateInput("", @DesktopWidth/2-170, @DesktopHeight/2+30, 340, 60, 0x0020)
    GUICtrlSetFont($PasswordInput, 36, 600, 0, 'Arial')
    GUICtrlSetColor($PasswordInput, 0xEE4444)
    GUICtrlSetCursor($PasswordInput, 5)

    $ExitButton = GUICtrlCreateButton("Beenden", 50, 32, 100, 22)
    GUICtrlSetOnEvent($ExitButton, "_End")
    GUICtrlSetState($ExitButton, $GUI_HIDE)

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

    $RestoreButton = GUICtrlCreateButton("Wiederherstellen", 50, 62, 100, 22)
    GUICtrlSetOnEvent($RestoreButton, "_Restore")

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

    GUISetState(@SW_SHOW, $hGui)

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

    WinSetTrans($hGui, '', 245)
    GUIRegisterMsg($WM_DEVICECHANGE, 'MY_WM_DEVICECHANGE')

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

    While 1
    sleep(10)
    If $bLock() Then
    ;~ _ToggleMonitor($hMonitor, $Off)
    GUICtrlSetState($RestoreButton, $GUI_HIDE)
    GUICtrlSetState($ExitButton, $GUI_HIDE); Exit Button ausblenden
    WinMove($sTitle, "", 0, 0, @DesktopWidth, @DesktopHeight); Fenster über den ganzen Bildschirm ausbreiten
    _MouseTrap(@DesktopWidth/2-170, @DesktopHeight/2+30, @DesktopWidth/2-170+340, @DesktopHeight/2+30+60); Maus über der Inputbox einfrieren
    WinKill("Windows Task-Manager"); TaskManager schließen
    WinSetOnTop("Desktopsperre v1.2", "", 1); Fenster über alles andere legen
    WinSetState("[class:Shell_TrayWnd]", "", @SW_HIDE); TasBar ausblenden
    WinKill("[class:DV2ControlHost]"); Startmenü unter dem Fenser zeigen
    If GUICtrlRead($PasswordInput) = $Password Then; $PasswordInput überprüfen
    GUICtrlSetState($RestoreButton, $GUI_SHOW); Wiederherstellen Button einblenden
    $bLock = False
    EndIf
    Else
    ;~ _ToggleMonitor($hMonitor, $On)
    _MouseTrap(); Maus wieder freigeben
    WinSetOnTop("Desktopsperre v1.2", "", 0); Fenster legt sich nichtmehr über alles andere
    GUICtrlSetState($ExitButton, $GUI_SHOW); Exit Button einblenden
    GUICtrlSetData($PasswordInput, ""); $PasswordInput leeren
    WinMove($sTitle, "", @DesktopWidth/1.2, @DesktopHeight/1.5 + 200, @DesktopWidth, @DesktopHeight); Fenster an ins untere rechte Eck verschieben
    WinSetState("[class:Shell_TrayWnd]", "", @SW_SHOW); TasBar einblenden
    EndIf
    Wend; Schleife fortsetzen

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

    Func MY_WM_DEVICECHANGE($hWnd, $Msg, $wParam, $lParam)
    $bLock = True
    For $count = 0 To RegRead($usbstor, 'count') - 1; Schleife für alle USB-Wechseldatenträger
    If $sID = RegRead($usbstor, $count) Then $bLock = False
    Next
    EndFunc

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

    Func _RegID()
    Local $count
    MsgBox(0, $sTitle, 'Falls der USB-Stick momentan eingesteckt ist,' & @CRLF & 'bitte entfernen und dann auf [Ok] klicken!')
    $count = RegRead($usbstor, 'count')
    MsgBox(0, $sTitle, 'Bitte jetzt den USB-Stick einstecken!' & @CRLF & 'Er wird automatisch erkannt.', 5)
    While RegRead($usbstor, 'count') = $count
    Sleep(100)
    WEnd
    $count = RegRead($usbstor, 'count')
    $sID = RegRead($usbstor, $count - 1)
    IniWrite($sIni, 'ID', '1', $sID)
    MsgBox(0, $sTitle, 'Dieser USB-Stick ist nun zum ent-/sperren des Desktop registriert!', 5)
    EndFunc

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

    Func _End()
    $ExitMessage = MsgBox(36, "Meldung " & $sTitle, 'Programm beenden?')
    If $ExitMessage = 6 Then
    Exit
    EndIf
    EndFunc

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

    Func _ToggleMonitor($hwnd, $OnOff)
    Local Const $WM_SYSCOMMAND = 0x0112
    Local Const $SC_MONITORPOWER = 0xF170
    _SendMessage($hWnd, $WM_SYSCOMMAND, $SC_MONITORPOWER, $OnOff)
    If @error Then Exit MsgBox(0, $sTitle, '_SendMessage Error: ' & @error)
    EndFunc

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

    Func _Restore()
    $bLock = True
    EndFunc

    [/autoit]

    Nur stört mich, wenn man nun START drückt, blinkt das Startmenü kurz über der GUi auf. Habe bis jetzt noch keine Lösung dafür gefunden. :/

    Zitat

    [Heute, 11:39] Raupi: Soll ich es dir machen?
    [Heute, 11:47] BugFix: "Soll ich es dir machen? " - also Raupi !! bitte nicht so öffentlich :rofl:

    Zitat

    [Heute, 11:51] BugFix: und ich werde es mir jetzt machen - das Mittagessen :P

    AMsg UDF v1.00.00 IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII 100%
    OwnStyle UDF Version 1.10.00 IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII 100%

  • Also wenn ich es starte kommt gleich: "Konnte Registryeintrag nicht lesen!".
    Also man muß doch erst einmal den USB-Stick "aktivieren" und dann muß es in die Registry eingetragen werden. Sonst kann das nichts werden. Aber eine PW-Abfrage ist schon mal eine gute Idee zur Weiterentwicklung.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Also bei mir funktioniert eigentlich alles. 8|

    Edit: Beim starten des Programms wäre es gut, wenn du den USB-Stick stecken hast. Dann kann er den Registryeintrag lesen. :)

    Zitat

    [Heute, 11:39] Raupi: Soll ich es dir machen?
    [Heute, 11:47] BugFix: "Soll ich es dir machen? " - also Raupi !! bitte nicht so öffentlich :rofl:

    Zitat

    [Heute, 11:51] BugFix: und ich werde es mir jetzt machen - das Mittagessen :P

    AMsg UDF v1.00.00 IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII 100%
    OwnStyle UDF Version 1.10.00 IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII 100%

  • Ich hab das Script nur ein bisscehn an meinem Computer angepasst und es dann hiergepostet. :)
    Ich will es nicht klauen oder sonstwas, wollte nur eine Möglichkeit vorstellen, wie man das mit Passwort machen könnte. :)

    Und wegen dem TrayMenu:
    Ich hab es nur auskommentiert, da ich selber wenig mit TrayMenu anfangen kann (War aber sehr schön gemacht, hab jetzt auch verstanden, wie man GUIOnEventMode im TrayMenu verwendet).

    Zitat

    [Heute, 11:39] Raupi: Soll ich es dir machen?
    [Heute, 11:47] BugFix: "Soll ich es dir machen? " - also Raupi !! bitte nicht so öffentlich :rofl:

    Zitat

    [Heute, 11:51] BugFix: und ich werde es mir jetzt machen - das Mittagessen :P

    AMsg UDF v1.00.00 IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII 100%
    OwnStyle UDF Version 1.10.00 IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII 100%

    • Offizieller Beitrag

    Das war nicht böse gemeint. Du kannst mein Script gern verwenden und etwas Eigenes daraus scripten, indem Du es anpasst oder etwas hinzufügst.
    Nur wenn es so weitreichend ist, sollte man schon zwei verschiedene Threads dazu haben, damit bei Fragen klar ist, auf welches Programm sich diese beziehen.
    Also nur zu, wenn Du das noch weiter ausbauen möchtest. :)

  • Oscar hab ne kleine verbesserung

    [autoit]

    If WinExists('Task Manager') Then WinClose('Task Manager')

    [/autoit]

    durch

    [autoit]

    If ProcessExists("taskmgr.exe") Then ProcessClose("taskmgr.exe")

    [/autoit]

    ersetzen ;)

  • Das ganze funktioniert wohl nicht unter Windows 7 - könnte man es darauf anpassen ? (Anscheinend existiert der Registry-Eintrag nicht. Warum 'Anscheinend' ? -> weil ich es selber nicht testen kann)

    Gruß

    Edit: Rückzug! Funktioniert doch.

    Einmal editiert, zuletzt von keksi (2. April 2010 um 11:11)

  • bug gefunden^^

    benutze das script unter w7
    wenn es an ist und der pc gesperrt, drückt man strg+alt+entf
    dann drückt man es wieder wenn das neue fenster offen ist(nicht der tasktmanager - ist ja nicht vorhanden)
    dann geht man über die pfeiltasten auf abmelden und drückt auf enter, zack , man wird gefragt ob man die sitzungen speichern möchte, drückt einfach auf abbrechen und script ist beendet^^

  • Das ist kein Bug, das ist einfach so. Das kann man auch praktisch nicht verhindern.
    Aber wenn man abgemeldet wird, kann ja sowieso kein Zugriff mehr auf den Rechner erfolgen, wenn - wovon ausgegangen wird - er mit einem Passwort geschützt ist.

    Twitter: @L3viathan2142
    Benutze AutoIt persönlich nicht mehr, da ich keinen Windows-Rechner mehr besitze.

  • shr nützlich :thumbup:
    funktioniert gut
    auch auf win7 64bit
    hab task manager, alt+f4 und alt+tab getestet
    hält stand!

    mfg bulli

  • Ich finds auch toll (heute das erste mal getestet (unter xp)).

    Echt klasse :thumbup:

    mfg Ubuntu

  • ok eine kleine bitte hätte ich nun ...
    wie bekomme ich wieder meinen task manager???
    ich habe jetzt heute mal den pc angemacht, und wollte jetzt task manager starten, doch jetzt ist er nichtmehr da.. wenn ich rechtsklick auf die leiste mache und tasktmanager starten will ist es grau hinterlegt... wäre dankbar wenn mir jemand helfen könnte..

    thx

    edit.. ok hab es:

    HKEY_CURRENT_USER\ Software\ Microsoft\ Windows\ CurrentVersion\ Policies\ System 0

    Einmal editiert, zuletzt von Texos (4. Juni 2010 um 14:13)

  • Uiiii, da ist der Wurm drin ;). Der PC wird gesperrt, obwohl kein USB Stick eingesteckt wurde und folgende Meldung kam: Die Erkennungszeit wurde überschritten! Es wurde kein USB-Stick erkannt!
    Wenn man dann OK klickt, war's das.

    Wenn du übrigens die Einträge im Sperrbildschirm einfach ausblendest, brauchst du die Maus nicht fangen und der Nutzer kann vom Windows-Sperrbildschirm zurück zum Sperrbildschirm deines Programms:

    [autoit]

    ; Einträge im Sperrbildschirm entfernen
    RegWrite('HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System','HideFastUserSwitching', 'REG_DWORD', '1')
    RegWrite('HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System','DisableLockWorkstation', 'REG_DWORD', '1')
    RegWrite('HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer','NoLogoff', 'REG_DWORD', '1')
    RegWrite('HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System','DisableChangePassword', 'REG_DWORD', '1')
    RegWrite('HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System','DisableTaskMgr', 'REG_DWORD', '1')

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

    ; Einträge im Sperrbildschirm wieder anzeigen
    RegWrite('HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System','HideFastUserSwitching', 'REG_DWORD', '0')
    RegWrite('HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System','DisableLockWorkstation', 'REG_DWORD', '0')
    RegWrite('HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer','NoLogoff', 'REG_DWORD', '0')
    RegWrite('HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System','DisableChangePassword', 'REG_DWORD', '0')
    RegWrite('HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System','DisableTaskMgr', 'REG_DWORD', '0')

    [/autoit]


    Klappt zumindest bei Windows 7 prima, woanders habe ich es noch nicht getestet.