PC Sichern

  • Hallo, ich habe Hier eine Idee/Skript angefangen, welche, den PC etwas Kindersicher machen soll, hinsichtlich der EIngabegeräte
    Ich habe das script in Kombination mit "DevCon" geschrieben, weil ich nicht weiß, wie ich nur mit Hilfe von AutoIt
    die Tastatur blockieren soll.

    Ausführung:
    Beim Ausführen des Skriptes, wird die Maus in einem Fenster gefangen und mithilfe von DevCon die Tastatur deaktiviert.
    beim schließen [X] des Fensters, wird sie wieder Aktiviert und die Maus Frei gelassen

    Probleme:
    1. Ich möchte verhindern, das man das Fenster in die Startleiste Ablegen kann
    2...und ja ich weiß das es mit Blockinput viel einfacher gehen würde und würde es gerne auch lieber so umschreiben

    Fragen:
    zu 1 wenn ich es bei Diesem Skript belasse, wie kann ich Verhindern, das man das Fenster minimieren kann?
    zu 2 wie kann ich Blockimput(1) nutzen ohne eine bestimmte zeit vorgeben zu müssen.
    ich würde gerne mittels Tastenkompination oder 2x Rechte Maustaste
    drücken das Skript beenden, aber wie, wenn die EIngabegeräte blockiert
    sind?
    gibt es einen Befehl, der NUR die Tastendrücke blockiert?

    [autoit]

    #include <GuiConstantsEx.au3>
    #include <Misc.au3>
    Opt("TrayIconHide", 1)
    Opt("WinTitleMatchMode", 2)
    Opt("MustDeclareVars", 1)

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

    _Main()

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

    Func _Main()

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

    Local $GUI, $coords[4]

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

    $GUI = GUICreate("Gefängnis", 160, 70,"","")
    GUICtrlCreateLabel("Deine Tastatur ist Gesperrt",2,"")
    GUICtrlCreateLabel("und Deine Maus bleibt",2,15)
    GUICtrlCreateLabel("in Diesem 'Gefängnis' bis Du",2,30)
    GUICtrlCreateLabel("Dieses Fenster wieder Schließt!",2,45)
    GUISetState(@SW_SHOW)

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

    ;Devcon-Ordner Ins sys32 packen, Version überprüfen 32 oder 64!
    ;*mein Persönlicher Wunschordner für das Programm
    run ("cmd")
    WinActivate("C:\Windows\system32\cmd.exe")
    Sleep(500)
    Send ("cd C:\Windows\system32\devcon\i386")
    send ("{Enter}")
    send ("devcon.exe")
    send ("{Enter}")
    send ("devcon disable HID\VID_046D*");ID der Tastaur eintragen
    send ("{Enter}")
    send ("exit")
    send ("{Enter}")
    While 1
    $coords = WinGetPos($GUI)
    _MouseTrap($coords[0], $coords[1], $coords[0] + $coords[2], $coords[1] + $coords[3])
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE

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

    run ("cmd")
    WinActivate("C:\Windows\system32\cmd.exe")
    Sleep(500)
    Send ("cd C:\Windows\system32\devcon\i386")
    send ("{Enter}")
    send ("devcon.exe")
    send ("{Enter}")
    send ("devcon enable HID\VID_046D*");ID der Tastaur eintragen
    send ("{Enter}")
    send ("exit")
    send ("{Enter}")
    ExitLoop
    Case Else
    ;;;
    EndSwitch
    WEnd
    _MouseTrap()
    Exit
    EndFunc ;==>_Main

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

    Einmal editiert, zuletzt von AsiX-5 (20. Mai 2012 um 23:15)

  • Nein warum sollte es Ein FunVirus sein?

    es steht doch in Dem Fenster geschrieben was passiert ist.
    Ich bin mit den Forum regeln vertraut und habe soetwas nicht im Sinn.
    ich möchte lediglich für eine Freundin ein möglichst einfaches Skript schreiben,
    Das Ihre kleine Tochter nicht auf der Tastatur und der Maus rumklimpert und so
    Ihre Tabs oder sonstige Sachen Schließt, wenn Sie auf dem WC oder sonstiges ist.

    wie schon erwähnt, würde ich es ja mit Blockimput machen, um mir "DevCon" zu Sparen
    Aber wie mache ich eine Tasteneingabe Ihrer Wahl, wenn denn Die Eingabegeräte gesperrt sind?
    ich möchte aber auch keine Zeitliche festlegung wie z.b.
    Blockinput(1)
    sleep 5000 ;zum beispiel
    Blockinput (0)
    denn wer weiß schon vorher, wie lange er auf Dem Örtchen sitzt?!

  • Zu deinem Blockinput-Problem:
    Du könntest einfach alle Tastendrücke mit _WinAPI_SetWindowsHookEx abfangen. Hier mal ein Beispiel, bei dem nur beim Drücken von F8 eine msgbox auftaucht und sich das Script beendet, alle anderen Tastendrücke werden ignoriert.

    Spoiler anzeigen
    [autoit]

    #include <WindowsConstants.au3>
    #include <WinAPI.au3>

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

    OnAutoItExitRegister("_Exit")
    $user_dll = DllOpen("user32.dll")

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

    $pStub_KeyProc = DllCallbackRegister("_KeyProc", "int", "int;ptr;ptr")
    $hHookKeyboard = _WinAPI_SetWindowsHookEx($WH_KEYBOARD_LL, DllCallbackGetPtr($pStub_KeyProc), _WinAPI_GetModuleHandle(0), 0)

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

    HotKeySet("{F8}", "_Func")

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

    While Sleep(100)
    WEnd

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

    Func _Func()
    MsgBox(0, "", "Entsperrt!")
    _Exit()
    EndFunc

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

    Func _KeyProc($nCode, $wParam, $lParam)
    If $nCode < 0 Then Return _WinAPI_CallNextHookEx($hHookKeyboard, $nCode, $wParam, $lParam)
    Local $tKEYHOOKS = DllStructCreate($tagKBDLLHOOKSTRUCT, $lParam)
    Local $vkCode = DllStructGetData($tKEYHOOKS, "vkCode")
    If ($wParam = $WM_KEYDOWN) And $vkCode <> 0x77 Then ; // 0x77 -> F8
    DllCall($user_dll, 'int', 'keybd_event', 'int', 0x0, 'int', 0, 'int', 0, 'ptr', 0)
    Return -1
    EndIf
    Return _WinAPI_CallNextHookEx($hHookKeyboard, $nCode, $wParam, $lParam)
    EndFunc

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

    Func _Exit()
    DllCallbackFree($pStub_KeyProc)
    _WinAPI_UnhookWindowsHookEx($hHookKeyboard)
    DllClose($user_dll)
    Exit
    EndFunc

    [/autoit]
  • so ich Habe mein Skript jetzt so erweitert, das ich Das Skript von "K4z" mit meinem Vorhaben Kombiniert habe, wobei folgendes herausgekommen ist:

    Ein Fenster, welches Die Maus Geschachtelt hält und beim Minimieren wieder Aktiviert wird
    wärenddessen ist die Tastatur gesperrt
    Beim Beenden des Fensters mittels [X] wird die Maus und die Tastatur Freigegeben.
    Funktioniert zumindest bei mir so, wie ich es mir Vorstellte :D

    [autoit]

    #include <WindowsConstants.au3>
    #include <WinAPI.au3>
    #include <GuiConstantsEx.au3>
    #include <Misc.au3>
    Opt("TrayIconHide", 1)
    Opt("WinTitleMatchMode", 2)
    OnAutoItExitRegister("_Exit")
    $user_dll = DllOpen("user32.dll")

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

    $pStub_KeyProc = DllCallbackRegister("_KeyProc", "int", "int;ptr;ptr")
    $hHookKeyboard = _WinAPI_SetWindowsHookEx($WH_KEYBOARD_LL, DllCallbackGetPtr($pStub_KeyProc), _WinAPI_GetModuleHandle(0), 0)
    _Main()

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

    Func _Main()

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

    Local $GUI, $coords[4]

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

    $GUI = GUICreate("Gefängnis", 160, 70,"","")
    GUICtrlCreateLabel("Deine Tastatur ist Gesperrt",2,"")
    GUICtrlCreateLabel("und Deine Maus bleibt",2,15)
    GUICtrlCreateLabel("in Diesem 'Gefängnis' bis Du",2,30)
    GUICtrlCreateLabel("Dieses Fenster wieder Schließt!",2,45)
    GUISetState(@SW_SHOW)
    While 1
    $coords = WinGetPos($GUI)
    _MouseTrap($coords[0], $coords[1], $coords[0] + $coords[2], $coords[1] + $coords[3])
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    ExitLoop
    Case Else
    EndSwitch
    if not winactive ("Gefängnis") Then
    winactivate ("Gefängnis")
    if not WinExists ("Gefängnis") Then
    Exit
    EndIf
    EndIf
    WEnd
    _MouseTrap()
    Exit
    EndFunc ;==>_Main

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

    While Sleep(100)
    WEnd

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

    Func _KeyProc($nCode, $wParam, $lParam)
    If $nCode < 0 Then Return _WinAPI_CallNextHookEx($hHookKeyboard, $nCode, $wParam, $lParam)
    Local $tKEYHOOKS = DllStructCreate($tagKBDLLHOOKSTRUCT, $lParam)
    Local $vkCode = DllStructGetData($tKEYHOOKS, "vkCode")
    If ($wParam = $WM_KEYDOWN) And $vkCode <> 0x77 Then ; // 0x77 -> F8
    DllCall($user_dll, 'int', 'keybd_event', 'int', 0x0, 'int', 0, 'int', 0, 'ptr', 0)
    Return -1
    EndIf
    Return _WinAPI_CallNextHookEx($hHookKeyboard, $nCode, $wParam, $lParam)
    EndFunc

    [/autoit]