GUIGetMsg()

  • Hallo

    Ich würde gern eine Msg zu GuiGetMsg() hinzufügen also wie $GUI_EVENT_CLOSE
    z.b wenn die maus an der position 0,0 ist soll der sagen bin bei 0,0
    geht das???
    danke im voraus

  • Meinst du z.B. so:

    [autoit]


    While 1
    $nMsg = Msg()
    Switch $nMsg
    Case $MAUS_IST_LINKSOBEN

    [/autoit]

    Das er dann eine Msg zurück gibt die das dann sagt das die Maus bei 0, 0 ist?

  • Hallo

    Ich würde gern eine Msg zu GuiGetMsg() hinzufügen also wie $GUI_EVENT_CLOSE
    z.b wenn die maus an der position 0,0 ist soll der sagen bin bei 0,0
    geht das???
    danke im voraus


    Nein, das geht nicht soweit ich weiß. Jedenfalls nicht wirklich ...

    Du kannst es aber so lösen ...

    Spoiler anzeigen
    [autoit]


    ;
    Global Const $WM_APP = 0x8000
    Global Const $WM_MOUSEUPPERLEFT = $WM_APP + 1

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

    Opt("MouseCoordMode", 2)

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

    $hwnd = GUICreate ("WM_APP Test")

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

    ; Erste Möglichkeit
    $MAUS_IST_LINKSOBEN = GUICtrlCreateDummy ( )

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

    ; Zweite Möglichkeit
    GUIRegisterMsg ($WM_MOUSEUPPERLEFT, "WM_MOUSEUPPERLEFT")

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

    GUISetState (@SW_SHOW, $hwnd)

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

    While (True)

    Switch (GUIGetMsg (False))

    Case $GUI_EVENT_CLOSE
    ExitLoop

    Case $MAUS_IST_LINKSOBEN
    ConsoleWrite ("+> Maus ist links-oben." & @crlf)

    Case Else
    CheckMousePos ( )
    EndSwitch
    WEnd

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

    Func CheckMousePos ( )

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

    Local $aPos = MouseGetPos ( )

    ; Wenn Maus in der linken-oberen Ecke des Anwendungsbereichs
    If ($aPos[0] == 0 and $aPos[1] == 0) Then
    ; Eine Nachricht an das Fenster senden.
    SendMessage ($hwnd, $WM_MOUSEUPPERLEFT, 0, 0)
    ; Eine Nachricht an das Dummy-Steuerelement senden.
    GUICtrlSendToDummy ($MAUS_IST_LINKSOBEN)
    EndIf

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

    EndFunc

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

    Func WM_MOUSEUPPERLEFT ( )

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

    Local $sMsgTitle = "WM_MOUSEUPPERLEFT"
    Local $sMsgText = "Die Maus befindet sich links-oben im Anwendungsbereich."

    MsgBox (266304, $sMsgTitle, $sMsgText)

    Return 0

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

    EndFunc

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

    Func SendMessage ($hWnd, $Msg, $wParam, $lParam)

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

    Local $aRes = DllCall ('user32.dll', 'ulong', 'SendMessage', _
    'hwnd', $hWnd, _
    'uint', $Msg, _
    'wparam', $wParam, _
    'lparam', $lParam)
    If @error Then _
    Return @error

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

    Return $aRes[0]

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

    EndFunc
    ;

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


    1) Über ein "Dummy-Steuerelement" kannst Du Nachrichten per GUIGetMsg erhalten.
    2) Eine eigene Nachricht definieren ($WM_APP + X) und diese dann an das betreffende Fenster senden.


    Gruß
    Greenhorn