ScreenLock - Desktop sperren mit Muster

  • Hallo liebe AutoIt-Community,

    ich möchte euch hier mein erstes veröffentlichtes Skript vorstellen: ScreenLock.

    Sicherlich kennt fast jeder von euch die Handysperre per Muster. Diese habe ich nun in AutoIt umgesetzt, da mir der normale Windows-Sperrbildschirm ziemlich langweilig erschien und ich nicht jedesmal mein Passwort eintippen wollte.

    Beim Sperren erscheint eine Vollbild-GUI, auf welcher zum Entsperren das Muster eingegeben werden muss.
    Es gibt außerdem ein Skript zum konfigurieren der Farbe, der Abdunklung des Hintergrunds und natürlich des Musters. :D

    Neue Version:

    Die Anzahl der Kreise ist nicht mehr auf 3 pro Spalte/Zeile festgelegt, sondern einstellbar.
    Es ist auch die Auswahl nur eines Kreises als Muster möglich.

    ScreenLock.au3
    [autoit]

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

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

    AutoIt Version: 3.3.8.1
    Author: Xenon

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

    Script Function: Locks the screen, for unlocking a code is needed.

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

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

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

    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <GDIPlus.au3>
    #include <WinAPI.au3>
    #include "BlockInputEx.au3"
    #include <Misc.au3>
    #include <Array.au3>
    #include <String.au3>

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

    Global $bEditMode = False
    Global $sIniSection = "ScreenLock"
    If $CmdLine[0] >= 1 And $CmdLine[1] = "ChangeCode" Then
    $bEditMode = True
    $sIniSection = "ScreenLockSettings"
    EndIf

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

    Global $sSettingsIni = @ScriptDir & "\Settings.ini"

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

    Global $nCirclesPerRow = Int(IniRead($sSettingsIni, $sIniSection, "Circles", 3))
    Global $nCircles = $nCirclesPerRow*$nCirclesPerRow
    Global $nRadius = Int((@DesktopHeight-100)/($nCirclesPerRow+($nCirclesPerRow+1)*0.5))*0.5
    Global $aState[$nCircles]
    Global $aOrder[$nCircles]
    Global $nLastCircle = -1
    Global $bRun = True
    Global $bCodeRight = True

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

    For $i = 0 To $nCircles-1
    $aOrder[$i] = -1
    Next

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

    ; Tastatur sperren
    If Not $bEditMode Then _BlockInputEx(3)

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

    ; GUI erstellen
    $hGUI = GUICreate("ScreenLock", @DesktopWidth + 10, @DesktopHeight + 10, -5, -5, $WS_POPUP, $WS_EX_TOPMOST)
    GUICtrlCreatePic("",0,0, @DesktopWidth + 10,@DesktopHeight + 10)
    ; Farbe = schwarz
    GUISetBkColor (0x000000, $hGUI)
    ; Transparenz aus Settings.ini
    WinSetTrans ($hGUI, "", IniRead($sSettingsIni, $sIniSection, "Transparency", 125))

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

    ; Eingabefeld erstellen
    $hChildInput = GUICreate("ScreenLockInput", @DesktopHeight-100, @DesktopHeight - 100, Int((@DesktopWidth-@DesktopHeight+100)*0.5)+10, 100+10, $WS_POPUP,$WS_EX_LAYERED+$WS_EX_MDICHILD+$WS_EX_TOPMOST, $hGUI)
    GUISetBkColor(0x050505, $hChildInput)
    _WinAPI_SetLayeredWindowAttributes($hChildInput, 0x050505)

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

    ; Text-GUI
    $hChildCaption = GUICreate("ScreenLockCaption", @DesktopHeight-100, 50, Int((@DesktopWidth-@DesktopHeight+100)*0.5)+10, 25+10, $WS_POPUP,$WS_EX_LAYERED+$WS_EX_MDICHILD+$WS_EX_TOPMOST, $hGUI)
    GUISetBkColor(0xABCDEF, $hChildCaption)
    $hLabelCaption = GUICtrlCreateLabel("Code eingeben", (@DesktopHeight-219-100)*0.5, 8, 219, 41)
    GUICtrlSetFont(-1, 25, 400, 0, "MS Sans Serif")
    GUICtrlSetColor(-1, IniRead($sSettingsIni, $sIniSection, "Color", "0x00FF00"))
    _WinAPI_SetLayeredWindowAttributes($hChildCaption, 0xABCDEF)

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

    ; Alles anzeigen
    GUISetState(@SW_SHOW, $hGUI)
    GUISetState(@SW_DISABLE, $hGUI)
    GUISetState(@SW_SHOW, $hChildInput)
    GUISetState(@SW_SHOW, $hChildCaption)

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

    _GDIPlus_Startup()

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

    ; Buffer erstellen
    $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hChildInput)
    $hBitmap = _GDIPlus_BitmapCreateFromGraphics(@DesktopHeight-100, @DesktopHeight-100, $hGraphic)
    $hBuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)
    _GDIPlus_GraphicsSetSmoothingMode ($hBuffer, 2)
    _GDIPlus_GraphicsSetSmoothingMode ($hGraphic, 2)

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

    ; Brushs und Pens erstellen
    $hBrushActivated = _GDIPlus_BrushCreateSolid (Dec("FF" & StringReplace(IniRead($sSettingsIni, $sIniSection, "Color", "0x00FF00"), "0x", "")))
    $hBrushInvisible = _GDIPlus_BrushCreateSolid (0xFF050505)
    $hBrushRed = _GDIPlus_BrushCreateSolid (0xFFFF0000)
    $hBrushWhite = _GDIPlus_BrushCreateSolid (0xFFFFFFFF)
    $hPenActivated = _GDIPlus_PenCreate (Dec("FF" & StringReplace(IniRead($sSettingsIni, $sIniSection, "Color", "0x00FF00"), "0x", "")), 6, 2)
    $hPenRed = _GDIPlus_PenCreate (0xFFFF0000, 6, 2)
    $hPenBlack = _GDIPlus_PenCreate (0xFF000000, 12, 2)

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

    ; Alles zeichnen
    _Render ()

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

    ; Dauerschleife
    While $bRun

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

    ; Andere Fenster in den Hintergrund
    If Not WinActive ("ScreenLockInput") And Not $bEditMode Then
    WinActivate ("ScreenLockInput")
    EndIf

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

    ; Überprüfen, ob linke Maustaste noch gedrückt, wenn ja, Abstand zu allen Kreisen berechen:
    $aCursorInfo = GUIGetCursorInfo ($hChildInput)
    If $aCursorInfo[2] Then
    $MousePosition = MouseGetPos ()
    For $i = 0 To $nCirclesPerRow-1 ; Alle Kreise durchlaufen
    For $j = 0 To $nCirclesPerRow-1
    If Sqrt (($MousePosition[0] - ($i *$nRadius*3+2*$nRadius + Int((@DesktopWidth-@DesktopHeight+100)*0.5)))*($MousePosition[0] - ($i *$nRadius*3+2*$nRadius + Int((@DesktopWidth-@DesktopHeight+100)*0.5))) + _
    ($MousePosition[1] - ($j *$nRadius*3+2*$nRadius + 100)) * ($MousePosition[1] - ($j *$nRadius*3+2*$nRadius + 100))) <= $nRadius Then ;Abstand nach Pythagoras

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

    $aState[$i*$nCirclesPerRow+$j] = 1
    If $nLastCircle <= $nCircles-1 And _ArraySearch ($aOrder, $i * $nCirclesPerRow + $j) = -1 Then
    $nLastCircle += 1
    $aOrder[$nLastCircle] = $i * $nCirclesPerRow + $j
    _Render ()
    EndIf

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

    If $nLastCircle >= $nCircles-1 And Not _CheckCode () Then
    _Render (True)
    Sleep (1500)
    For $i = 0 To $nCircles-1
    $aOrder[$i] = -1
    $aState[$i] = 0
    Next
    $nLastCircle = -1
    _Render ()
    EndIf
    EndIf
    Next
    Next
    Else
    If $aOrder[0] <> -1 And Not _CheckCode () Then
    _Render (True)
    Sleep (1500)
    For $i = 0 To $nCircles-1
    $aOrder[$i] = -1
    $aState[$i] = 0
    Next
    $nLastCircle = -1
    _Render ()
    EndIf
    EndIf
    WEnd

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

    ; Ressourcen freigeben
    _GDIPlus_PenDispose ($hPenActivated)
    _GDIPlus_PenDispose ($hPenRed)
    _GDIPlus_PenDispose ($hPenBlack)
    _GDIPlus_BitmapDispose ($hBitmap)
    _GDIPlus_BrushDispose ($hBrushActivated)
    _GDIPlus_BrushDispose ($hBrushInvisible)
    _GDIPlus_BrushDispose ($hBrushRed)
    _GDIPlus_BrushDispose ($hBrushWhite)
    _GDIPlus_GraphicsDispose($hGraphic)

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

    _GDIPlus_Shutdown()

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

    If Not $bEditMode Then _BlockInputEx (0) ; Tastatur entsperren

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

    Func _CreateCircle ($nColor, $nCenterX, $nCenterY) ; $nColor - Farbe (0-weiß, 1-aktive Farbe, 2-Fehler) ; $nCenterX/Y - Mittelpunkt des zu zeichnenden Kreises (Koordinaten)
    Local $nWidth1 = 10
    Local $nWidth2 = 20
    Local $nWidth3 = 60
    Local $hBrush
    If $nColor = 0 Then
    $hBrush = _GDIPlus_BrushClone ($hBrushWhite)
    ElseIf $nColor = 1 Then
    $hBrush = _GDIPlus_BrushClone ($hBrushActivated)
    ElseIf $nColor = 2 Then
    $hBrush = _GDIPlus_BrushClone ($hBrushRed)
    EndIf
    _GDIPlus_GraphicsFillEllipse($hBuffer, $nCenterX - $nRadius , $nCenterY - $nRadius , 2*$nRadius , 2*$nRadius)
    _GDIPlus_GraphicsFillEllipse($hBuffer, $nCenterX - $nRadius + Round($nRadius/100*$nWidth1), $nCenterY - $nRadius + Round($nRadius/100*$nWidth1), 2*$nRadius - Round($nRadius/100*2*$nWidth1), 2*$nRadius - Round($nRadius/100*2*$nWidth1), $hBrush)
    _GDIPlus_GraphicsFillEllipse($hBuffer, $nCenterX - $nRadius + Round($nRadius/100*$nWidth2), $nCenterY - $nRadius + Round($nRadius/100*$nWidth2), 2*$nRadius - Round($nRadius/100*2*$nWidth2), 2*$nRadius - Round($nRadius/100*2*$nWidth2))
    _GDIPlus_GraphicsFillEllipse($hBuffer, $nCenterX - $nRadius + Round($nRadius/100*$nWidth3), $nCenterY - $nRadius + Round($nRadius/100*$nWidth3), 2*$nRadius - Round($nRadius/100*2*$nWidth3), 2*$nRadius - Round($nRadius/100*2*$nWidth3), $hBrush)
    _GDIPlus_BrushDispose ($hBrush)
    EndFunc ; _CreateCircle ($nColor, $nCenterX, $nCenterY)

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

    Func _Render ($bWrongCode = False) ; $bWrongCode - Falscher Code eingegeben? (standart: nein)

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

    ; unsichtbarer Hintergrund
    _GDIPlus_GraphicsFillRect ($hBuffer, -1, -1, @DesktopWidth+2, @DesktopWidth+98, $hBrushInvisible)

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

    If Not $bWrongCode Then

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

    ; kein falscher Code -> Standardfarben
    If Not $bCodeRight Then
    GUICtrlSetData ($hLabelCaption, "Code eingeben")
    GUICtrlSetColor($hLabelCaption, IniRead($sSettingsIni, "ScreenLock", "Color", "0x00FF00"))
    $bCodeRight = True
    EndIf

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

    ; alle Linien zeichnen
    For $i = 1 To $nCircles-1
    If $aOrder[$i] = -1 Then ExitLoop
    _GDIPlus_GraphicsDrawLine ($hBuffer, Int($aOrder[$i-1]/$nCirclesPerRow) *$nRadius*3+2*$nRadius, Mod($aOrder[$i-1], $nCirclesPerRow)*$nRadius*3+2*$nRadius, Int($aOrder[$i]/$nCirclesPerRow) *$nRadius*3+2*$nRadius, Mod($aOrder[$i], $nCirclesPerRow)*$nRadius*3+2*$nRadius, $hPenBlack)
    _GDIPlus_GraphicsDrawLine ($hBuffer, Int($aOrder[$i-1]/$nCirclesPerRow) *$nRadius*3+2*$nRadius, Mod($aOrder[$i-1], $nCirclesPerRow)*$nRadius*3+2*$nRadius, Int($aOrder[$i]/$nCirclesPerRow) *$nRadius*3+2*$nRadius, Mod($aOrder[$i], $nCirclesPerRow)*$nRadius*3+2*$nRadius, $hPenActivated)
    Next

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

    ;Kreise erstellen
    For $i = 0 To $nCirclesPerRow-1
    For $j = 0 To $nCirclesPerRow-1
    _CreateCircle ($aState[$i*$nCirclesPerRow+$j], $i*$nRadius*3+2*$nRadius, $j*$nRadius*3+2*$nRadius)
    Next
    Next

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

    Else
    ; falscher Code -> rote Farbe

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

    If $bCodeRight Then
    GUICtrlSetData ($hLabelCaption, "Falscher Code")
    GUICtrlSetColor($hLabelCaption, 0xFF0000)
    $bCodeRight = False
    EndIf

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

    ; alle Linien zeichnen
    For $i = 1 To $nCircles-1
    If $aOrder[$i] = -1 Then ExitLoop
    _GDIPlus_GraphicsDrawLine ($hBuffer, Int($aOrder[$i-1]/$nCirclesPerRow) *$nRadius*3+2*$nRadius, Mod($aOrder[$i-1], $nCirclesPerRow)*$nRadius*3+2*$nRadius, Int($aOrder[$i]/$nCirclesPerRow)*$nRadius*3+2*$nRadius, Mod($aOrder[$i], $nCirclesPerRow)*$nRadius*3+2*$nRadius, $hPenBlack)
    _GDIPlus_GraphicsDrawLine ($hBuffer, Int($aOrder[$i-1]/$nCirclesPerRow) *$nRadius*3+2*$nRadius, Mod($aOrder[$i-1], $nCirclesPerRow)*$nRadius*3+2*$nRadius, Int($aOrder[$i]/$nCirclesPerRow)*$nRadius*3+2*$nRadius, Mod($aOrder[$i], $nCirclesPerRow)*$nRadius*3+2*$nRadius, $hPenRed)
    Next

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

    ;Kreise erstellen
    For $i = 0 To $nCirclesPerRow-1
    For $j = 0 To $nCirclesPerRow-1
    _CreateCircle (2, $i*$nRadius*3+2*$nRadius, $j*$nRadius*3+2*$nRadius)
    Next
    Next
    EndIf

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

    ; alles auf GUI anzeigen
    _GDIPlus_GraphicsDrawImageRect($hGraphic, $hBitmap, 0, 0, @DesktopHeight-100, @DesktopHeight-100)

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

    EndFunc

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

    Func _CheckCode ()
    Local $sCode = ""

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

    ; Code entsteht aus zusammensetzen der Reihenfolge zu einem String
    For $i = 0 To $nCircles-1
    If $aOrder[$i] <> -1 Then
    $sCode &= $aOrder[$i]
    Else
    ExitLoop
    EndIf

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

    Next

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

    If Not $bEditMode Then
    ; Wenn .ini-Code leer oder gleich dem Eingegebenen, dann Programm beenden
    If IniRead ($sSettingsIni, "ScreenLock", "Code", "") = "" Or IniRead ($sSettingsIni, "ScreenLock", "Code", "") == _StringEncrypt (1, $sCode, $sCode, 3) Then
    $bRun = False
    Return True ;richtiger Code
    EndIf
    Return False ;falscher Code
    Else
    IniWrite ($sSettingsIni, $sIniSection, "Code", _StringEncrypt (1, $sCode, $sCode, 3))
    $bRun = False
    Return True
    EndIf

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

    EndFunc

    [/autoit]
    ScreenLockSettings.au3
    [autoit]

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

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

    AutoIt Version: 3.3.8.1
    Author: Xenon

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

    Script Function: Changes the settings for the ScreenLock script.

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

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

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

    #include <Misc.au3>
    #include <GUIConstantsEx.au3>
    #include <Process.au3>

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

    ; Variablen
    Global $sSettingsIni = @ScriptDir & "\Settings.ini"
    Global $nColor = Dec(StringReplace(IniRead ($sSettingsIni, "ScreenLock", "Color", "0x00FF00"), "0x", ""))
    Global $nTempColor = 0
    Global $nTransparency = IniRead ($sSettingsIni, "ScreenLock", "Transparency", 125)
    Global $nCirclesPerRow = IniRead ($sSettingsIni, "ScreenLock", "Circles", 3)
    Global $sCode = IniRead ($sSettingsIni, "ScreenLock", "Code", "")
    #Region ### GUI

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

    $hGUI = GUICreate("ScreenLock - Optionen", 553, 492, 192, 124)
    $hLabel1 = GUICtrlCreateLabel("Transparenz des Sperrbildschirms:", 16, 40, 198, 17)
    GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
    $hTransparency = GUICtrlCreateSlider(40, 72, 425, 41)
    GUICtrlSetLimit(-1, 255, 1)
    GUICtrlSetData(-1, $nTransparency)
    $hLabel2 = GUICtrlCreateLabel("Transparent", 24, 120, 61, 17)
    $hLabel3 = GUICtrlCreateLabel("Nicht transparent", 416, 120, 85, 17)
    $hLabel4 = GUICtrlCreateLabel("Muster:", 16, 160, 46, 17)
    GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
    $hColor = GUICtrlCreateButton("Farbe ändern", 325, 250, 129, 33)
    $hCode = GUICtrlCreateButton("Muster ändern", 325, 315, 129, 33)
    $hLabel5 = GUICtrlCreateLabel ("Anzahl der Kreise je Reihe bzw. Spalte:", 20, 200)
    $hCircles = GUICtrlCreateSlider (210, 197, 250, 30)
    GUICtrlSetLimit(-1, 7, 2)
    GUICtrlSetData(-1, $nCirclesPerRow)
    $hLabel6 = GUICtrlCreateLabel (GUICtrlRead($hCircles), 470, 200)
    $hLabel7 = GUICtrlCreateLabel("Farbe der Kreise:", 20, 260)
    $hLabel8 = GUICtrlCreateLabel("Muster:", 20, 320)
    $hSave = GUICtrlCreateButton("OK", 145, 432, 121, 33)
    $hExit = GUICtrlCreateButton("Abbrechen", 275, 432, 121, 33)
    $hShowColor = GUICtrlCreateGraphic(150, 255, 150, 25, 0)
    GUISetState(@SW_SHOW)
    #EndRegion

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

    GUICtrlSetBkColor($hShowColor, $nColor)
    GUICtrlSetData ($hTransparency, $nTransparency)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $hExit
    Exit
    Case $hColor
    ; Farbe wählen
    $nTempColor = _ChooseColor (2, $nColor, 2, $hGUI)
    If $nTempColor <> -1 And $nTempColor <> 0x000000 Then
    $nColor = $nTempColor
    GUICtrlSetBkColor($hShowColor, $nColor)
    EndIf
    Case $hCode

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

    IniWrite ($sSettingsIni, "ScreenLockSettings", "Color", "0x" & Hex($nColor, 6))
    IniWrite ($sSettingsIni, "ScreenLockSettings", "Transparency", GUICtrlRead($hTransparency))
    IniWrite ($sSettingsIni, "ScreenLockSettings", "Circles", GUICtrlRead($hCircles))

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

    If FileExists (@ScriptDir & "\ScreenLock.au3") Then
    _RunDos (@ScriptDir & "\ScreenLock.au3 ChangeCode")
    ElseIf FileExists (@ScriptDir & "\ScreenLock.exe") Then
    Run (@ScriptDir & "\ScreenLock.exe ChangeCode")
    Else
    MsgBox (16, "ScreenLock", "Es wurde im Skriptverzeichnis keine Datei" & @CRLF & "'ScreenLock.au3' bzw. 'ScreenLock.exe'" & @CRLF & "gefunden. Muster ändern nicht möglich!", 0, $hGUI)
    EndIf

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

    $sCode = IniRead ($sSettingsIni, "ScreenLockSettings", "Code", "")

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

    Case $hSave
    If $sCode = "" Then
    MsgBox (16, "ScreenLock", "Es wurde kein Code angegeben!", 0, $hGUI)
    Else
    IniWrite ($sSettingsIni, "ScreenLock", "Color", "0x" & Hex($nColor, 6))
    IniWrite ($sSettingsIni, "ScreenLock", "Transparency", GUICtrlRead($hTransparency))
    IniWrite ($sSettingsIni, "ScreenLock", "Circles", GUICtrlRead($hCircles))
    IniWrite ($sSettingsIni, "ScreenLock", "Code", $sCode)
    Exit
    EndIf

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

    Case $hCircles
    GUICtrlSetData ($hLabel6, GUICtrlRead($hCircles))

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

    EndSwitch
    WEnd

    [/autoit]

    Achtung: Damit die Konfigurationen wirksam werden, müssen sich beide .au3-Dateien im selben Ordner befinden.
    Weiterhin wird für das Sperren des Desktops die Datei "BlockInputEx.au3" benötigt, erhältlich hier.

    Tipp: Sollte man den Code jedoch einmal vergessen haben, so hilft immer nocht Strg+Alt+Entf! ;)


    Ich freue mich schon auf Kritik bzw. Lob.

    MfG Xenon :)

  • Nette Idee und ganz gut umgesätzt.

    Sind TV-Quizfragen zu einfach? A) Ja B) Harry Potter

    Spoiler anzeigen

    Ich gebe zu dieser Post hat wahrscheinlich nicht viel geholfen,
    aber ich versuche wenigstens zu helfen :rolleyes:

  • Sehr gute Idee in der Tat.
    Da kann man ja noch allerhand machen ;)
    Aber sehr gut umgesetzt :thumbup:

    Um Missverständnisse zu vermeiden, mein Name rührt vom Sternenbild und nicht vom Shop her :D


    Rainbow Dash :rock:

    "Das, wobei unsere Berechnungen versagen, nennen wir Zufall." (Albert Einstein)

  • Gute Idee, schön umgesetzt.
    Dennoch ein Verbesserungsvorschlag:
    Setze ein _GDIPlus_SetSmoothingMode(2) an den Anfang nach der GDI+ Initialisierung, damit die Kreiskanten nicht so pixelig-kantig aussehen ;)

  • Vielen Dank für eure Rückmeldungen!

    TheShadowAE:
    Falls du _GDIPlus_GraphicsSetSmoothingMode meinst, das hatte ich schon gemacht. :D

    Sirocool:
    Ich hoffe, es klappt jetzt! :)

    Ich bin gerade noch beim Verbessern, ihr könnt mir gerne noch Tipps geben, was ich besser machen könnte. ;)

    MfG Xenon

  • So, ich habe jetzt eine neue Version des Skriptes hochgeladen:

    Die schwarze, nicht transparente Fläche ist entfernt und noch ein paar kleine andere Änderungen wurden gemacht.

    Download siehe Post 1.

    MfG Xenon

  • Finde das Script auch ganz nett :)

    Du schreibst:

    Läßt sich das auch verhindern, das man die Sperre mit Strg+Alt+Entf nicht umgehen kann?
    Das würde für mich mehr Sinn machen ;)

    Würde mich auch interessieren :)

    Da es hier doch einige falsch machen:

    Zitat von einem User dieses Forums

    Die Standard-Standart eines Flamingos ist einbeinig. ;)

  • Hallo,

    @Autolaser/Joriktos:

    Ich kenne nur die Möglichkeit, eine Taste systemweit zu deaktivieren, siehe hier.

    Dazu ist jedoch ein Neustart nötig, deshalb kann ich so etwas nicht in mein Programm einbauen.
    Wenn ihr diese Möglichkeit jedoch nutzen möchtet, könntet ihr z.B. nur die Alt-Taste deaktivieren, dann funktioniert Strg+Alt+Entf auch nicht mehr.

    Aber vorsicht: wenn ihr Strg+Alt+Entf bei der Anmeldung benötigt, das klappt dann auch nicht mehr. ;)

    Ob es noch eine andere Möglichkeit gibt, würde mich auch sehr interessieren.

    MfG Xenon


  • Stimmt, des kenn ich auch^^ So kann man den TaskManager deaktivieren und auf dem Strg+Alt+Entf-Screen von Win7 nichts anzeigen lassen:

    Spoiler anzeigen
    [autoit]


    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','DisableTaskMgr', 'REG_DWORD', '1')
    RegWrite('HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System', 'DisableChangePassword', 'REG_DWORD', 1)

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

    While 1
    If ProcessExists ("taskmgr.exe") Then ProcessClose ("taskmgr.exe")
    Sleep(100)
    WEnd

    [/autoit]

    Da es hier doch einige falsch machen:

    Zitat von einem User dieses Forums

    Die Standard-Standart eines Flamingos ist einbeinig. ;)

  • Hi Joriktos,

    Ich meinte eher den unteren Teil :D :

    Kiosk Mode unter Windows 7 absichern


    Tasten deaktivieren

    Eine Möglichkeit alle Tastenkombinationen zu unterbinden ist das komplette Deaktivieren einzelner Tasten, wie z.B. die Windows-Tasten, STRG, ALT, DEL, F10, sowie die Kontextmenü-Taste. Hierzu muss in der Registry unter

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout

    den Wert des Eintrags Keyboard Layout geändert werden. Am Einfachsten geht dies über ein Reg-File mit folgendem Inhalt:

    Windows Registry Editor Version 5.00
    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
    "Scancode Map"=hex:00,00,00,00,00,00,00,00,09,00,00,00,00,00,5b,e0,00,00,5c,e0,00,00,5d,e0,00,00,44,00,00,00,1d,00,00,00,38,00,00,00,1d,e0,00,00,38,e0,00,00,00,00

    Dieser Text wird in einen Texteditor kopiert und die Datei mit beliebigem Name sowie der Dateiendung „.reg“ abgespeichert und anschließend ausgeführt. Durch den Vorgang wird der Inhalt der Scancode Map überschrieben und damit die Tasten Windows-Taste, STRG, ALT, DEL, F10, sowie die Kontextmenü-Taste deaktiviert.

    Die Funktionsweise (Hinweis: alle Werte sind hexadezimal):
    Der Wert 09 nach den ersten 16 Nullen definiert die Anzahl der Tasten-Mappings. Dies sind in unserem Fall 9. Anschließend kommen 10 Nullen bis die eigentlichen Mappings beginnen. Hierbei bedeutet „5b e0 00 00“ das Deaktivieren der linken Windows-Taste. Im Folgenden werden alle verwendeten Mappings aufgelistet:

    5b e0 – linke Windows-Taste
    5c e0 – rechte Windows-Taste
    5d e0 – Kontextmenü-Taste
    44 00 – F10
    1d 00 – linke Strg-Taste
    38 00 – linke Alt-Taste
    1d e0 – rechte Strg-Taste
    38 e0 – rechte Alt-Taste

    ACHTUNG:
    Das systemweite Deaktivieren der Tasten STRG, ALT und ENTF führt dazu, dass diese Tasten auch beim Anmeldebildschirm nicht funktionieren. Somit lässt sich die Sichere Anmeldung mit STRG+ALT+ENTF nicht verwenden, die daher unbedingt vorher über die Benutzerkontensteuerung deaktiviert werden muss, weil sich der Nutzer sonst vom Zugriff auf das System ausschließt


    Das Beispiel muss natürlich noch abgewandelt werden, damit z.B. nur die Alt-Taste deaktiviert wird.

    Aber meiner Meinung nach ist es gar nicht notwendig, Strg+Alt+Entf zu deaktivieren:
    Der Taskmanager bringt nichts (der wird sofort in den Hintergrund gerückt) und Abmelden/Herunterfahren/... kann man auch durch den POWER-Knopf erreichen.

    MfG Xenon

  • Anscheinend hat es noch keiner gemerkt.

    [autoit]

    _GDIPlus_BrushCreateSolid ("0xFF" & StringReplace(IniRead($sSettingsIni, "ScreenLock", "Color", "0x00FF00"), "0x", ""))

    [/autoit]


    _GDIPlus_BrushCreateSolid will einen Integer und keinen String, also 0xFF00FF00 und nicht "0xFF00FF00".
    In der Settings.ini steht z.B. Color=65280, also als Dezimalzahl, nicht als Hex, so wie er es bei IniRead verlangt.

    Ansonsten ist es ne gute Idee. Nur an der Umsetzung happert es ein wenig.

    Edit:
    Also müsste es so heißen:

    [autoit]

    _GDIPlus_BrushCreateSolid(Dec("FF" & StringReplace(IniRead($sSettingsIni, "ScreenLock", "Color", "0x00FF00"), "0x", "")))
    _GDIPlus_PenCreate(Dec("FF" & StringReplace(IniRead($sSettingsIni, "ScreenLock", "Color", "0x00FF00"), "0x", "")), 6, 2)

    [/autoit]


    und in der Ini so:

    Code
    Color=0x00FF00

    Einmal editiert, zuletzt von m-obi (24. Juni 2013 um 20:24)

  • Also bei mir war es vor der Änderung kein grün, sondern eher ein schwarz. Nach der Änderung war es das grün, was es sein sollte, wenn man den Code zeichnet. Und wenn mit IniRead der Wert eingelesen wird und in der Ini steht Color=65280, daran wird dannoch ein 0xFF rangestellt, ist es dann 0xFF65280. Und da das dann 7 Stellen sind, wird innerhalb der GDI-Funktion vorne eine 0 rangehangen, also 0x0FF65280. Und das wird dann dargstellt.
    Also wenn, dann sollte man das schon richtig abspeichern und später wieder richtig verarbeiten und sich nicht darauf verlassen, dass die Datentypen hin und her gewandelt werden automatisch. Das ist sonst unsaubere Programmierung.

  • Das ist sonst unsaubere Programmierung.

    Da hast du natürlich recht.

    Bei mir war die Farbe auch einmal schwarz, aber da das dann plötzlich nicht mehr so war, habe ich mir nichts dabei gedacht...
    Noch einmal vielen Dank :)

    MfG Xenon