Windows Hotkeys in GUIs

  • "Hallo allerseits,

    ich habe wirklich sehr viel gegoogelt und leider nichts gefunden.

    Es geht um folgendes:
    Ich habe ein GUI mit IE und ich kann keine Windows Hotkeys im GUI nutzen. Also z.b. copy and paste mit STRG+C,V usw...
    Haue mich schon seit Tagen rum mit diesem Problem, ich hoffe ihr könnt mir helfen.
    Ich glaube die Hotkeys müssen einfach nur definiert werden, aber wie?
    Danke schonmal im Voraus.

    Hier mein GUI:

    [autoit]

    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <IE.au3>

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

    $Form1 = GUICreate("Browser", @DesktopWidth - 10, @DesktopHeight - 75, 1, 1)
    $DateCall = GUICtrlCreateDate("", @DesktopWidth - 115, 1, 100, 25, 0)
    GUISetState() ;SHOW GUI

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

    Global $aObj[8], $aObj_Ctrl[8], $aButtons[8]
    For $i = 0 To 7
    ; Button
    $aButtons[$i] = GUICtrlCreateButton("Browser", 16 + (120 * $i), 1, 113, 25, $WS_GROUP)

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

    ; Embedded IE
    $aObj[$i] = _IECreateEmbedded()
    $aObj_Ctrl[$i] = GUICtrlCreateObj($aObj[$i], 1, 25, @DesktopWidth - 10, @DesktopHeight - 75)
    GUICtrlSetState(-1, $GUI_HIDE)

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

    ; Navigate
    $aObj[$i] .navigate("www.google.de")
    Next

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

    ; Show the first IE.
    GUICtrlSetState($aButtons[0], $GUI_DISABLE)
    GUICtrlSetState($aObj_Ctrl[0], $GUI_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    Case $aButtons[0] To $aButtons[7]
    ; Hide everything
    For $i = 0 To 7
    GUICtrlSetState($aButtons[$i], $GUI_ENABLE)
    GUICtrlSetState($aObj_Ctrl[$i], $GUI_HIDE)
    Next

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

    ; Show the IE
    For $i = 0 To 7
    If $aButtons[$i] = $nMsg Then
    GUICtrlSetState($aButtons[$i], $GUI_DISABLE)
    GUICtrlSetState($aObj_Ctrl[$i], $GUI_SHOW)
    ExitLoop
    EndIf
    Next
    EndSwitch
    WEnd

    [/autoit]
    • Offizieller Beitrag

    Du bastelst 8!! Embedded IE-Fenster? :D
    Na gut, jedem das Seine. ;)

    Du kannst mit HotKeys arbeiten oder aber (was eindeutig zu bevorzugen ist) mit Accelerator-Keys. D.h., man weist bestimmten Ctrl. eine Tastenkombination zu. In diesem Fall habe ich einfach zwei Dummies erstellt um die Tastenkombination abfangen zu können.
    Dein Fenster ist ja keine GUI, sondern ein IE-Objekt und kann deshalb auch nur mit IE-Befehlen interagieren:

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <IE.au3>
    #Include <SendMessage.au3>

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

    $Form1 = GUICreate("Browser", @DesktopWidth - 10, @DesktopHeight - 75, 1, 1)
    $dummyCopy = GUICtrlCreateDummy()
    $dummyPaste = GUICtrlCreateDummy()
    $DateCall = GUICtrlCreateDate("", @DesktopWidth - 115, 1, 100, 25, 0)
    GUISetState() ;SHOW GUI

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

    Local $AccelKeys[2][2]=[["^c", $dummyCopy], ["^v", $dummyPaste]] ; <==============================
    GUISetAccelerators($AccelKeys) ; <==============================

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

    Global $aObj[8], $aObj_Ctrl[8], $aButtons[8]
    For $i = 0 To 7
    ; Button
    $aButtons[$i] = GUICtrlCreateButton("Browser", 16 + (120 * $i), 1, 113, 25, $WS_GROUP)

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

    ; Embedded IE
    $aObj[$i] = _IECreateEmbedded() ; == 8!! Embedded Browser
    $aObj_Ctrl[$i] = GUICtrlCreateObj($aObj[$i], 1, 25, @DesktopWidth - 10, @DesktopHeight - 75)
    GUICtrlSetState(-1, $GUI_HIDE)

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

    ; Navigate
    $aObj[$i] .navigate("www.google.de")
    Next

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

    ; Show the first IE.
    GUICtrlSetState($aButtons[0], $GUI_DISABLE)
    GUICtrlSetState($aObj_Ctrl[0], $GUI_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    Case $dummyCopy
    For $i = 0 To 7
    If BitAND(GUICtrlGetState($aObj_Ctrl[$i]), $GUI_SHOW) Then
    _IEAction ( $aObj[$i], 'copy' ) ; <==============================
    ExitLoop
    EndIf
    Next

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

    Case $dummyPaste
    For $i = 0 To 7
    If BitAND(GUICtrlGetState($aObj_Ctrl[$i]), $GUI_SHOW) Then
    _IEAction ( $aObj[$i], 'paste' ) ; <==============================
    ExitLoop
    EndIf
    Next

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

    Case $aButtons[0] To $aButtons[7]
    ; Hide everything
    For $i = 0 To 7
    GUICtrlSetState($aButtons[$i], $GUI_ENABLE)
    GUICtrlSetState($aObj_Ctrl[$i], $GUI_HIDE)
    Next

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

    ; Show the IE
    For $i = 0 To 7
    If $aButtons[$i] = $nMsg Then
    GUICtrlSetState($aButtons[$i], $GUI_DISABLE)
    GUICtrlSetState($aObj_Ctrl[$i], $GUI_SHOW)
    ExitLoop
    EndIf
    Next
    EndSwitch
    WEnd

    [/autoit]
  • sehr sehr vielen dank bugfix, warst für mich wirklich ein bugfix ^^

    kann man das eigentlich auch global im voraus definieren, sodass es für alle IE Embedded Fenster gilt?
    weil das ganze will ich noch ein bisschen schöner machen, sodass STRG + A, DEL, TAB usw funktionieren.
    Ehrlich gesagt benutze ich nicht den script, den ich oben angegeben habe ^^, benutze das ganze in einem umständlicheren script, also ohne For $i=0 To 7 usw.
    siehe hier

    (Link gelöscht, da nicht boardintern)

    ich brauche es, weil ich loginscripts bei bestimmten Objects habe. deswegen: kann man das ganze irgendwie auch global definieren im voraus?

    Einmal editiert, zuletzt von oispnr (16. Oktober 2011 um 14:32)

  • Halo oispnr.

    findest du es nicht dreist hier auf ein fremdes Board zu verlinken? Daher plädiere ich dafür galls du dein echtes Skript nicht einstellst dieses Thema zu CLOSEn ,

    mfg autoBert

  • oh, wenn ich was falsches getan habe, dann sry
    ich war bisher auf dem anderen board und dort konnte mir keiner helfen... sry ich wusste nicht dass ich dadruch etwas falsches mache, ich bearbeite gleich mal meinen post, sodass man den link nicht mehr sehen kann