Hotkeys funktionieren obwohl Programm im Hintergrund

  • Grüß Gott zusammen,

    Habe foglendes Problem:
    Ich habe ein Fenster mit Buttons. Habe den Buttons auch schon Hotkeys zugeordnet.
    Nun möchte ich, dass man die Hotkeys immer noch drücken kann und dadurch die Funktion der Buttons (Lieder abspielen) aufgerufen wird obwohl man schon in einem anderen Programm ist.
    D.h. ich starte mein Fenster gehe dann in ein anderes Programm, Firefox z.B. und drücke dann den Hotkey der dann das Lied (in dem Fall) abspielt.

    Jemand eine Idee?

    Danke im Voraus

  • Du könntest auch auf

    [autoit]

    _IsPressed()

    [/autoit]

    des Misc.au3 Includes umsteigen.
    Müsste dann aber alles in einer Schleife geprüft werden, um entsprechende Funktionen aufzurufen. Außerdem sollte die Funktion dann nur bei positivem Prüfergebnis eines "Ist-das-Fenster-Aktiv-Tests" aufrufen.

  • Hi,
    wenn du Hotkeys mit HotkeySet zuweist dann sind diese immer aktiv. Benutzt du aber Accelerators dann sind diese nur aktiv wenn das Fenster Fokus hat (glaub ich zumindest).


    Richtig, und hier ein erweitertes bsp. aus dem englischen Forum :
    http://www.autoitscript.com/forum/topic/66…-for-hotkeyset/

    Das finden von Rechtschreibfehlern muss sofort und unverzüglich dem Autor gemeldet werden. Das eigennützige Verwenden dieser Rechtschreibfehler ist strengstens untersagt und kann mit Freiheitsenzug bestraft werden.

  • Hallo,
    ich benutze "leider" Accelerators, weil es dann leichter ist da die Hotkeys ja praktisch den Buttonklick ausführen.
    Jetzt versteh ich immer noch nicht ganz wie ich die Idee von stayawayknight umsetze...

  • [autoit]

    If Winactive(blabla) Then
    Hotkeyset("{F1}", "Test")
    Else
    HotKEyset("{F1}")

    [/autoit]

    Edit ja auch ich müsste lesen lernen... vergiss was ich geschrieben habe ^^

  • Hey.

    Also ich verstehe dein Problem nicht, und wenn du wirklich GUISetAccelerators benutz, dann lügst du, oder du erklärst dein Problem falsch!
    Wenn das Fenster NICHT den Fokus hat, dann wird auch keine MSG des Typs Command bzw. mit der ID, in meinem Bsp. des Buttons ausgelöst!
    Oder anders gesagt das hier :

    ich benutze "leider" Accelerators, weil es dann leichter ist da die Hotkeys ja praktisch den Buttonklick ausführen.


    entspricht nicht der Warheit, denn wenn du Accelerators benutzt, wird die nachricht an die WndProc nur ausgelöst, wenn das Fenster den Fokus hat!

    Hier mien Bsp:

    Spoiler anzeigen
    [autoit]

    $hGUI = GUICreate('Test', 200, 200)
    $iButton = GUICtrlCreateButton('Button', 100, 100)
    Dim $AccelKeys[1][2] = [["^b", $iButton]]
    GUISetAccelerators($AccelKeys)
    GUISetState()

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

    While 1
    Switch GUIGetMsg()
    Case -3
    Exit
    Case $iButton
    MsgBox(0, "Push", "You pushed the button")
    EndSwitch
    WEnd

    [/autoit]

    Drück dich einfach mal STRG und "b" wenn das fenster den Fokus hat, und probiers auch mal, wenn das Fenster den Fokus NICHT hat!
    Die MsgBox erscheint nur, wenn das Fenster den Fokus hat

    Ach übrigens funktioniert das ganze auch im OnEventMode :

    Spoiler anzeigen
    [autoit]

    Opt('GUIOnEventMode',1)
    $hGUI = GUICreate('Test', 200, 200)
    $iButton = GUICtrlCreateButton('Button', 100, 100)
    GUICtrlSetOnEvent(-1, '_PushedButton')
    Dim $AccelKeys[1][2] = [["^b", $iButton]]
    GUISetAccelerators($AccelKeys)
    GUISetOnEvent(-3, '_Exit')
    GUISetState()

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

    While 1
    Sleep(100)
    WEnd

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

    Func _PushedButton()
    MsgBox(0, "Push", "You pushed the button")
    EndFunc

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

    Func _Exit()
    Exit
    EndFunc

    [/autoit]

    Fettes EDIT: Tut mir leid, lesen sollte man können :) Hab das total falsch verstanden. Indemfall musst du Hotkeys benutzen, diese müssten meiner meinung nach auch funktionieren, wenn das Fenster den Fokus NICHT hat, ansonsten fällt mir nur noch die lösung mit _IsPressed ein.

    Das finden von Rechtschreibfehlern muss sofort und unverzüglich dem Autor gemeldet werden. Das eigennützige Verwenden dieser Rechtschreibfehler ist strengstens untersagt und kann mit Freiheitsenzug bestraft werden.

    2 Mal editiert, zuletzt von Darter (14. April 2011 um 08:55)

    • Offizieller Beitrag

    Ich würde HotKeySet benutzen, warum das ganze _IsPressed gedönse?

    @Ardor, ließ mal deinen Threadtitel und stell dir vor das du ein anderer wärst.
    Irgendwie ist das Unglücklich gewählt, hört sich wie das Gegenteil von dem an, was du suchst ;)
    Ich Glaube das haben auch einige andere so gesehen, wenn ich mir die Antworten anschaue. 8|