HotKeySet temporär deaktivieren | Abfrage ob ein Fester/Tab aktiv ist

  • Hi,

    ich hätte folgende Fragen:
    1. Wie kann man ein HotKey temporär deaktivieren?

    2. Wie kann ich abfragen ob ein Fenster aktiv ist?
    - habe versucht mit WinActive zu arbeiten, hat aber leider ÜBERHAUPT nicht funktioniert. Damit hat er mir lediglich das Fenster in den Vordergrund geholt, nicht aber abgefragt ob es im Vordergrund ist.

    _____
    Insgesamt möchte ich Folgendes bewerkstelligen:
    Wenn das GUI-Fenster bzw. ein bestimmtes Tabitem aktiv ist sollen bestimmte Tasten mit HotKeySet abgefragt werden, ansonsten soll ganz normal die vorher abgefragte Taste "gesendet" werden - also am besten HotKeySet deaktiviert werden.

    Ich möchte nur äußerst ungerne in den GUI-Loop eine derartige Abfrage einbauen, da ich ja eigentlich eben explizit versuche eine Geschwindigkeitsabnahme zu verhindern.

    Ideen? :D

    Lächel, du kannst sie nicht alle töten.

    Einmal editiert, zuletzt von masterRobb (15. Mai 2013 um 19:53)

  • Zu 1: hast du evtl. WinActivate() statt WinActive() verwendet?

    Zu 2: HotKeySet() mit deinem Hotkey ohne den 2. Parameter zu verwenden deaktiviert den Hotkey

    [autoit]

    HotKeySet("{ESC}", "_exit") ;aktiviert den HotKey
    HotKeySet("{ESC}") ;deaktiviert den HotKey

    [/autoit]

    Edit: Hier noch ein Beispiel für Hotkeyset per aktivem Tab

    Spoiler anzeigen
    [autoit]

    HotKeySet("{Space}", "_Beep")

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

    $GUI = GUICreate("Tab-Beispiel", 500,500)
    $Tab = GUICtrlCreateTab(5,5,490,490)
    GUICtrlCreateTabItem("Tab 1")
    GUICtrlCreateTabItem("Tab 2")
    GUICtrlCreateTabItem("")

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

    GUISetState()

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

    While 1
    Switch GUIGetMsg()
    Case -3
    Exit
    Case $Tab
    Switch GUICtrlRead($Tab)
    Case 0
    HotKeySet("{Space}", "_Beep")
    Case 1
    HotKeySet("{Space}")
    EndSwitch
    EndSwitch
    WEnd

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

    Func _Beep()
    HotKeySet("{Space}") ; es bietet sich an den HotKey am Anfang der Funktion zu deaktivieren
    Beep(2000, 100)
    HotKeySet("{Space}", "_Beep") ; und am Ende wieder zu aktivieren
    EndFunc

    [/autoit]
    UNPLEASANT SPOILER

    You just lost the game!

    Einmal editiert, zuletzt von shadow667 (13. Mai 2013 um 19:54)

  • Danke für die Antworten, waren bereits sehr hilfreich.
    Eine weitere Frage:
    kann man mit GuiSetAccelerators() auch direkt auf eine Funktion hinweisen? Oder geht das dann nur auf ein GUIObjekt - also Button oder Labels etc.?
    Sonst müsste ich, wenn ich GuiSetAccelerators() benutzen möchte mit buttons der Größe 0 arbeiten und ich glaube, dass das nicht so sauber ist :D
    => ich möchte ja keinen button eig. haben :D
    Und wenn, wie würde das gehen wenn ich nur einen button mit z.B. Enter gedrückt haben möchte? :D Bei mir klappt es irgendwie erst ab 2 Zuweisungen (also sozusagen 2 "hotkeys") ^^

    Lächel, du kannst sie nicht alle töten.

  • Es geht auch mit HotkeySet:

    Spoiler anzeigen
    [autoit]

    Global $HotKeyArray[4][3]

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

    HotKeySet("{F1}", "ShowActiveHotkeys")

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

    $HotKeyArray[0][0] = "{F2}" ; Hotkey
    $HotKeyArray[0][1] = "Test2" ; Funktionsname
    $HotKeyArray[0][2] = "Unbenannt - Editor" ; Fenstername

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

    $HotKeyArray[1][0] = "{F3}"
    $HotKeyArray[1][1] = "Test3"
    $HotKeyArray[1][2] = "Fenstername"

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

    $HotKeyArray[2][0] = "{F4}"
    $HotKeyArray[2][1] = "Test4"
    $HotKeyArray[2][2] = "Fenstername"

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

    $HotKeyArray[3][0] = "{F5}"
    $HotKeyArray[3][1] = "Test5"
    $HotKeyArray[3][2] = "Fenstername"

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

    While 1
    Sleep(100)
    Updatehotkeys()
    WEnd

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

    Func ShowActiveHotkeys()
    For $I = 0 To UBound($HotKeyArray) -1

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

    If WinActive($HotKeyArray[$i][2], "") Then
    ConsoleWrite("Aktives Fenster: " &$HotKeyArray[$i][2] & @CRLF & "Aktiver Hotkey: " & $HotKeyArray[$i][0] & @CRLF & "Funktionsname: " & $HotKeyArray[$i][1] & @CRLF)
    EndIf
    Next
    EndFunc

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

    Func Updatehotkeys()
    For $I = 0 To UBound($HotKeyArray) -1
    If WinActive($HotKeyArray[$i][2], "") Then
    HotKeySet($HotKeyArray[$i][0], $HotKeyArray[$i][1])
    Else
    HotKeySet($HotKeyArray[$i][0])
    EndIf
    Next
    EndFunc

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

    Func Test2()
    MsgBox(0, "Test", "Test2")
    EndFunc

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

    Func Test3()
    MsgBox(0, "Test", "Test3")
    EndFunc

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

    Func Test4()
    MsgBox(0, "Test", "Test4")
    EndFunc

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

    Func Test5()
    MsgBox(0, "Test", "Test5")
    EndFunc

    [/autoit]