_IsPressed wird ignoriert

  • Hallo zusammen,

    ich habe folgende Funktion. Sie soll eigentlich einen PC runterfahren, was auch funktioniert. Jedoch möchte ich, das wenn ich die F11 Taste drücke, sich nur die Anwendung beendet, aber der Shutdown nicht stattfindet. Leider funktioniert der Teil mit der F11 Taste nicht. Was mache ich hier falsch ?

    _IsPressed wird ignoriert
    [autoit]

    Func _KCLStopmodus(); PC wird runtergefahren
    MsgBox(0, "Stop", "Dein Computer schaltet sich in 15 Sekunden automatisch ab" & @CRLF & @CRLF & "Tschüss " & $var_Benutzername, 15)
    Local $hDLL = DllOpen("user32.dll")
    While 1
    If _IsPressed("7A", $hDLL) Then ; 7A ist die F11 Taste
    ConsoleWrite("_IsPressed - Shift Key was pressed." & @CRLF)
    While _IsPressed("7A", $hDLL)
    Sleep(5000)
    Exit
    WEnd
    DllClose($hDLL)
    Else
    Shutdown(13)
    Exit
    EndIf
    WEnd
    EndFunc ;==>_KCLStopmodus

    [/autoit]


    Gruss Hassan

    Einmal editiert, zuletzt von HassanMullah (11. September 2012 um 11:25)

  • So lange die MsgBox noch offen ist wird das Script nicht weiter ausgeführt sprich du kommst nicht in deine While. Und sobald du die Msg schließt muss sofort die F11 gedrückt sein sonst geht es direkt in den else-Zweig deiner If-Abfrage und damit zum Shutdown.

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Also die Msgbox wird doch nach 15 Sekunden automatisch geschlossen. Die Frage ist, was ich machen muss um direkt danach so ca. 5 Sekunden Zeit zu bekommen um die F11 Taste zu drücken. Bischen Code wäre nett :)

    Gruß Hassan

  • Kannst so machen:

    Spoiler anzeigen
    [autoit]

    #include < Misc.au3 >
    MsgBox(0, "Stop", "Dein Computer schaltet sich in 15 Sekunden automatisch ab" & @CRLF & @CRLF & "Tschüss " & "laal", 15)
    Local $hDLL = DllOpen("user32.dll")

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

    $begin = TimerInit()
    While 1
    If TimerDiff($begin) < 5000 Then
    If _IsPressed("7A", $hDLL) Then ; 7A ist die F11 Taste
    ConsoleWrite("_IsPressed - Shift Key was pressed." & @CRLF)
    DllClose($hDLL)
    Exit

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

    EndIf
    Else
    Shutdown(13)
    Exit
    EndIf
    WEnd

    [/autoit]

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Während der MsgBox() pausiert Dein Script. Die MsgBox lässt sich auch mit F11 nicht beenden. Bestätigst Du die MsgBox z.B. mit Enter, dann ist innerhalb kürzester Zeit, der Shutdown (Else-Zweig der _Ispressed()) bereits ausgelöst.

    Wenn Ich die F11-Taste bis zum Timeout der MsgBox festhalte, wird sie bei mir auch erkannt !

    Ich würde die MsgBox durch einen Splash und eine 15s Warteschleife ersetzen, in der Du dann mit IsPressed() abbrechen kannst.

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"