AktionsKeys[HotKeySet] blokieren Eingabe dieser

  • Also das Problem ist das wenn ich mit HotKeySet eine Aktionstaste (z.B.: a) festlege,

    dann kann ich diese Taste nicht mehr verwenden. (Außer für die festgelegte Aktion halt)

    Wenn ich nun in iein Textfeld ein a eingeben will... also in Windows oder sonst wo.. und das Programm dabei noch läuft, dann geht dies nicht. :(


    Kann man iwie einstellen, das die HotKeys nur im Programm und nicht immer laufen?

    Einmal editiert, zuletzt von hundi (15. Januar 2009 um 11:31)

  • Klappt auf jedenfall.

    Ist aber immer noch das Problem das die Aktion weiterhin ausgeführt wird.

    Zur Info: Ich hab eine GUI und wenn diese nicht im Vordergrund ist darf die Aktion nicht ausgeführt werden.

    Da gibt es doch bestimmt auch was oder?

  • Man legt ja auch keine Hotkeys auf normale Tasten nutz am besten Tastenkombis.

    Ansonsten kannst du ja mit WinWait/WinWaitActive überprüfen ob das Script läuft und je nachdem den Hotkey setzen bzw. die Original-Funktion zurücksetzen.

  • Ich bastel z.Z. ein Programm zum Bilder anschaun und da brauch ich z.B. die Pfeiltasten und +, - und so, aber halt keine Tastenkombis.

    Daher die Frage.


    Wenn ich WinWaitActive mit in die Endlosschleife packe gehe leider die Performance miserabel in den Keller.

  • Hatte ich schon nachgeschaut aber das hat ich auch noch nicht gesehn.

    Vom Effekt her aber doch das selbe wie _isPressed?


    Was halt jetzt noch fehlt, das wenn die GUI nicht aktiv ist diese dadurch ausgelösten Funktionen nicht ausgelöst werden. :rolleyes:

  • Mini-Beispiel
    [autoit]

    #include <GUIConstantsEx.au3>
    HotKeySet('a', '_MsgBox')

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

    GUICreate('Bla')
    GUISetState()

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

    While 1
    $msg = GUIGetMsg()
    If $msg = $GUI_EVENT_CLOSE Then ExitLoop
    Sleep(20)
    WEnd

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

    Func _MsgBox()
    If BitAND(WinGetState('Bla'),8) Then MsgBox(0, "Hallo", "Du hast a gedrückt")
    EndFunc

    [/autoit]
    • Offizieller Beitrag

    Wenn bestimmte Hotkeys nur aktiv sein sollen, wenn das Fenster aktiv ist, dann benutze ich immer diese Funktion:

    [autoit]


    #include <WindowsConstants.au3>
    #include<GUIConstantsEx.au3>
    GUICreate("")
    GUISetState()
    GUIRegisterMsg($WM_ACTIVATE, 'MY_WM_ACTIVATE')

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

    Do
    Sleep(20)
    Until GUIGetMsg() = $GUI_EVENT_CLOSE

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

    Func MY_WM_ACTIVATE($hWnd, $Msg, $wParam, $lParam)
    If BitAND($wParam, 0x0000ffff) Then ; Wenn Fenster aktiv, dann..
    HotKeySet('a', '_End')
    Else ; sonst...
    HotKeySet('a')
    EndIf
    EndFunc

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

    Func _End()
    Exit
    EndFunc

    [/autoit]
  • Wenn es für eine von dir erstellte GUI ist: ( abgeändertes GUICtrlSetAccelerators Beispiel)

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>

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

    GUICreate("GuiSetAccelerators Test")

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

    GUICtrlCreateLabel("Button oder ""h"" drücken", 10, 10)
    $YesID = GUICtrlCreateButton("Yes (Ctrl-y)", 10, 50, 80, 30)
    $NoID = GUICtrlCreateButton("No (Ctrl-n)", 100, 50, 80, 30)
    $HiddenID = GUICtrlCreateDummy()

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

    ; Setze HotKeys für Ctrl+y , Ctrl+n und h
    Dim $AccelKeys[3][2]=[["^y", $YesID], ["^n", $NoID], ["h", $HiddenID]]
    GUISetAccelerators($AccelKeys)

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

    GUISetState() ; display the GUI

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

    Do
    $msg = GUIGetMsg()

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

    Select
    Case $msg = $YesID
    MsgBox(0, "You clicked on", "Yes")
    Case $msg = $NoID
    MsgBox(0, "You clicked on", "No")
    Case $msg = $HiddenID
    MsgBox(0, "You clicked on", "Hotkey h")
    EndSelect
    Until $msg = $GUI_EVENT_CLOSE

    [/autoit]