Vorheriger Fokus

  • Hallo,

    wenn ich einen Button auf einer GUI anklicke, erhält dieses Fenster natürlich auch den Fokus. Wie kann ich feststellen, welches Fenster vorher den Fokus hatte ?

    Szenario: Es sind 5 Mails jeweils im eigenen Fenster geöffnet, ebenso die GUI mit 30 buttons für diverse Texte oder Aktionen. Ich möchte irgendwo in irgendeiner mail den Cursor positionieren und dann einen button anklicken. An dem "Ort vorher" soll Text eingefügt bzw.die Aktion ausgeführt werden.

    Danke aus Hamburg.

    Thomas

    Einmal editiert, zuletzt von Thomas55 (12. Mai 2012 um 14:00)

  • Moinsen,

    Spoiler anzeigen
    [autoit]

    ;[...]
    GUIRegisterMsg ($WM_SETFOCUS, "OnSetFocus")
    ;[...]

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

    Func OnSetFocus ($hwnd, $message, $wParam, $lParam)

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

    ; hwnd enthält das Handle des Fensters, das den Fokus erhalten hat.
    ; wParam enthält das Handle des Fensters, das den Fokus verloren hat.

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

    ; Ist das Fenster aus wParam ein Steuerelement und Du brauchst den Identifizierer, dann...
    Local $uIDCtrl

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

    $uIDCtrl = GetDlgCtrlID ($wParam)
    ;[...]

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

    Return $GUI_RUNDEFMSG

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

    EndFunc

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

    Func GetDlgCtrlID ($hwndCtl)

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

    Local $aRes = DllCall ("user32.dll", "INT", "GetDlgCtrlID", _
    "HWND", $hwndCtl)
    Return $aRes[0]

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

    EndFunc

    [/autoit]


    Gruß
    Greenhorn


  • Hallo Greenhorn und Strahleman,

    erstmal vielen Dank! Leider habe ich immer noch keinen Durchblick, wie das ganze wirklich funktioniert und kann so Deinen Code auch nicht wirlich nachvollziehen.

    Der folgende Code ist aus der Hilfe kopiert. In den Zeilen 25-28 dreht sich ja alles nur im Kreis, müßte da nicht etwas rein wie "DoEvents" aus VBA ?


    Könntest Du bitte Dein Posting in den Code (farbig) kopieren?

    Vielleicht habe ich auch nur das Brett vorm Kopf ..........

    Danke.

    Thomas

  • Hier ist auch eine Alternative. Verbiete deinem Fenster einfach, den Fokus zu bekommen.

    Spoiler anzeigen
    [autoit]

    #include <WinAPI.au3>
    #include <WindowsConstants.au3>
    #include <GUIConstantsEx.au3>

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

    #region - GUI Create
    $hGUI = GUICreate('Keyboard', 200, 80, -1, -1, BitOR($WS_CAPTION, $WS_POPUP, $WS_SYSMENU), BitOR($WS_EX_TOOLWINDOW, $WS_EX_TOPMOST, 0x8000000));$WS_EX_NOACTIVATE))
    $BUTTON = GUICtrlCreateButton("HI", 10, 10, 20, 20)
    GUISetState(@SW_SHOWNOACTIVATE)
    #endregion

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

    #region - GUI SelectLoop
    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    Exit
    Case $msg = $BUTTON
    Send("HI!"&@CRLF)
    EndSelect
    WEnd
    #endregion

    [/autoit]