HotkeySet mit "if"...

  • Hey, ich habe mal eine Frage :)...

    Laut Hilfe-Datei kann man HotkeySet auch ohne den 2. Parameter aufrufen, da es eine Funktion ist, sollte ich die also auch auf den Wahrheitswert prüfen können?!(gibt ja auch einen Rückgabewert...)

    Warum funktioniert also z.B. folgendes nicht? ->

    [autoit]


    While 1
    Sleep(100)
    if HotKeySet("{SPACE}") Then
    MsgBox(64, "", "5")
    EndIf
    WEnd

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


    Danke schonmal...^^


    LG

  • was hätte HotkeySet ohne 2 Parameter für einen sinn

    es weiß denn doch nicht welche funktion es aufrufen soll wenn du den bestimten key dürckst


    Wenn du nur den ersten parameter angibst dann gibst du den hotkey wieder frei

    //Edit: und was du suchst ist _IsPressed

    das würde dann so aussehen

    [autoit]


    #include <Misc.au3>
    While 1
    Sleep(100)
    If _IsPressed(20) Then
    MsgBox(64, "", "5")
    EndIf
    WEnd

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

    ; oder mit hotkeyset

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

    HotKeySet("{SPACE}", "Pressed")
    While 1
    Sleep(100)
    WEnd

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

    Func Pressed()
    MsgBox(64, "", "5")
    EndFunc ;==>Pressed

    [/autoit]
  • Ich kenne _IsPressed! Damit habe ich bisher auch viel mehr gearbeitet, bietet aber nicht das, was ich will :)...

    Ohne 2 Parameter bringt das den Sinn, dass ich, wenn ich EINE Taste gedrückt halte (Shift z.B.) und dann noch mehrere andere Möglichkeiten, _IsPressed mit Verschachtelung SAU lang machen müsste...

    _IsPressed gibt solange "1" aus, bis man die Taste los lässt... Und wenn ich dann Shift gedrückt halte und keine ewig lange Verschachtelung darunter habe, dann reagiert er nicht auf andere Tastendrücke...


    Weisst du, was ich meine?

    HotKeySet reagiert nur 1x kurz... Und für alle Möglichkeiten Funktionen zu machen, wäre auch doof... Man kann ja keine eigenen Parameter mitgeben, daher... Muss doch so in der Art gehen?!


    LG

  • An den Parametern solls nicht scheitern.

    [autoit]


    Hotkeyset("Dein Hotkey", "DummyFunktion"
    Func _DummyFunktion()
    _RichtigeFunktion($var1, $var2, ... , $varn)
    Endfunc

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

    Func _RichtigeFunktion($var1, $var2, ... , $varn)
    ;dein Code
    Endfunc

    [/autoit]
  • was hätte HotkeySet ohne 2 Parameter für einen sinn

    Das hätte den Sinn, die verknüpfte Funktion zu entfernen.

    @Acanis: Suchst du

    [autoit]

    #include <Misc.au3>

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

    $dll = DllOpen("user32.dll")

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

    While 1
    Sleep (10)
    If _IsPressed("53", $dll) Then
    $sPRE = ""
    If _IsPressed("10",$dll) THen $sPRE &= "SHIFT+"
    If _IsPressed("11",$dll) THen $sPRE &= "STRG+"
    If _IsPressed("12",$dll) THen $sPRE &= "ALT+"
    ConsoleWrite($sPRE&"S Pressed"&@CRLF)
    While _IsPressed("53",$dll) * Sleep(100)
    WEnd
    EndIf
    WEnd
    DllClose($dll)

    [/autoit]

    Oder vllt eher:

    [autoit]

    _WinAPI_SetWindowsHookEx

    [/autoit]


    Wobei ich mich damit aber überhaupt nicht auskenne.

  • Hi,
    hab mal etwas in der Mottenkiste gekramt und ein Script gefunden, um die erweiterten Tastencodes meiner Tastatur herauszubekommen. Das Script wurde bissl erweitert, vielleicht ist was brauchbares dabei...

    Spoiler anzeigen
    [autoit]


    #include <Misc.au3>
    $dll = DllOpen("user32.dll")

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

    $gui = GUICreate('gedrückte Tasten')
    ;GUICtrlCreateLabel("Bitte beliebige Tastenkombinationen drücken oder"&@crlf & @CRLF &"rechteCTRL+AltGR+# um zu beenden",10,10)
    GUISetState()

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

    Do
    $all_pressed_keys = _tasten() ;alle tastencodes, die gleichzeitig gedrückt sind
    If $all_pressed_keys = "" Then $all_pressed_keys = "keine"
    WinSetTitle($gui, "", 'gedrückte Tasten: ' & $all_pressed_keys); tastencodes im fenstertitel
    Until guigetmsg()=-3 or _pressedkeys("A3 A5 BF", $all_pressed_keys) ;wenn in irgendeiner Tastenkombination rechtectrl+altGR+# gedrückt wird, dann ende
    dllclose($dll)

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

    Func _tasten() ;alle gleichzeitig gedrückten Tasten werden mit ihren hexcodes zurückgegeben
    $tastencode = ""
    For $i = 1 To 256
    If _IsPressed(Hex($i), $dll) = 1 Then
    $tastencode &= Hex($i, 2) & " "
    EndIf
    Next
    Return $tastencode
    EndFunc ;==>_tasten

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

    Func _pressedkeys($keys, ByRef $all_pressed_keys) ;$keys ist der string der übergebenen Hexdaten
    $key = StringSplit($keys, " ", 3) ;tastencodes in ein array
    If @error Then Return 0
    $anzahl = 0
    For $i = 0 To UBound($key) - 1 ; alle
    If StringInStr($all_pressed_keys, $key[$i], 1) Then $anzahl += 1 ;wenn key in all_pressed_keys enthalten ist, anzahl erhöhen
    Next
    If $anzahl = UBound($key) Then Return 1 ;alle tasten in $keys wurden betätigt
    Return 0
    EndFunc ;==>_pressedkeys

    [/autoit]

    eine Frage dazu habe ich noch, wieso wird jeder Tastendruck mit einem Sound von Windows (XP) quittiert, wenn die Zeile mit dem Guictrlcreatelabel() aktiv ist?

  • eine Frage dazu habe ich noch, wieso wird jeder Tastendruck mit einem Sound von Windows (XP) quittiert, wenn die Zeile mit dem Guictrlcreatelabel() aktiv ist?

    Weil das Lable dann Fokus hat. Da _IsPressed() den Tastendruck nicht blockt, versuchst du ins Lable reinzuschreiben

  • Das Script gucke ich mir nachher mal an Oo...

    SEuBo: Thx, das habe ich aber selber bekommen, das meinte ich mit verschachtelt ist "doof"... Weil ich einige Kombos habe :p...

    nuts: *hmmm* Das wäre ne Idee... Hatte auch überlegt, die Hauptfunktion zu manipulieren, aber man included ja dafür gar nichts...
    So könnte das ne richtig gute Idee sein, thx...^^

    LG