hotkeys für andere programme benutzbar halten

  • wenn man bei autoit hotkeys verwendet, sind diese ja nicht mehr in andern progammen nutzbar. zb wenn man f5 nutzt kann man im browser damit nicht mehr refreshen. also möchte ich es so machen dass die keys nur in bestimmten fenstern funktionieren.

    leider komm ich mit dem return nur aus der ersten funktion und nicht der zweiten raus

    Einmal editiert, zuletzt von diepfeile (26. November 2011 um 22:12)

  • Moin,

    Ich habe hier mal was für das dann Skript-eigene Programmfenster gebaut - aber du musst nur den WinActive - Befehl auf dein(e) Wunsch-Fenster anpassen:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #Region ### START Koda GUI section ### Form=C:\_AutoIT\AutoIt.de\FormHotKey-nur-wenn-Fenster-aktiv.kxf
    $Form1 = GUICreate("HotKey-nur-wenn-Fenster-aktiv", 387, 66, 697, 276)
    $LabelStatus = GUICtrlCreateLabel("Fenster ist NICHT aktiv", 8, 8, 372, 28, BitOR($SS_CENTER,$SS_CENTERIMAGE,$WS_BORDER))
    GUICtrlSetFont(-1, 12, 800, 0, "Courier New")
    GUICtrlSetColor(-1, 0xFF0000)
    $Label2 = GUICtrlCreateLabel("F5 drücken - MsgBox kommt wenn dieses Fenster aktiv ist, sonst nicht.", 8, 40, 372, 17, $SS_CENTER)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    WinSetOnTop($Form1,"",1)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    If WinActive($Form1) = 0 Then
    GUICtrlSetData($LabelStatus,"Fenster ist NICHT aktiv")
    GUICtrlSetColor($LabelStatus, 0xFF0000)
    HotKeySet("{F5}")
    Else
    GUICtrlSetData($LabelStatus,"Fenster ist aktiv !!!")
    GUICtrlSetColor($LabelStatus, 0x00FF00)
    HotKeySet("{F5}","_HotkeyF5")
    EndIf
    WEnd

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

    Func _HotKeyF5()
    MsgBox(0,"HotKey Test","Es wurde F5 gedrückt")
    EndFunc

    [/autoit]

    Es wird nur in einer Endlosschleife abgefragt ob das Fenster aktiv ist oder nicht - und entsprechend der Hotkey gesetzt.
    Eventuell (je nach dem was dein Programm macht) kannst du es ja noch per Sleep() abbremsen.

    Ich hoffe ich konnte helfen,

    BLinz

  • Oder am besten gleich _IsPressed nehmen, dann gibts solche Probleme erst gar nicht


    Mhh - Einspruch ?( kommt darauf an was er will

    _IsPressed funktioniert ja auch global - Die Prüfung, ob das Fenster aktiv ist, bleibt also.
    Dann müsste er in der Schleife beides testen - ob Fenster aktiv, und wenn ja ob Taste gedrückt. (Oder umgekehrt)

    Nachteil oder Vorteil bei _IsPressed ist, das der Tastendruck ja trotzdem bei der Anwendung landet.
    Will er also, das der Tastendruck auch bei dem Zielfenster ankommt, kann er _IsPressed nehmen,
    Will er die Taste abfangen so weis ich nichts besseres als HotKeySet.

    Gegenvorschläge?

  • Wenn du Hotkeys nur für deine eigene Anwendung erstellen willst, ist die Verwendung von GUISetAccelerators eine gute Alternative.

  • Wenn du Hotkeys nur für deine eigene Anwendung erstellen willst, ist die Verwendung von GUISetAccelerators eine gute Alternative.


    gerade mal getestet - cool ...

    Ich glaube ich muss mir mal die Hilfe-Datei nehmen und Befehl für Befehl durchlesen .... im Examples Ordner sind 2.140 Dateien ... puhhh ich glaube ich habe erst einen Bruchteil davon genutzt / gesehen ....