Control Click Cords

  • Hi
    Welche Funktion kann man verwenden um die Control Click Cords eines Fensters zu erhalten?
    die GetMousePos Funktion klappt hier nicht da es für das ganze Fenster gilt.
    eine GetMouseControlPos funktion wäre super = ).
    vielelicht hat jemand helfen.
    danke
    mfg
    neo

  • ich weiß nicht ob ich dich richtig verstanden habe aber das könnte mit

    [autoit]

    _WinApi_GetMousePos
    _WinApi_GetMousePosX
    _WinApi_GetMousePosY

    [/autoit]


    gehen.Schau dir einfach mal das Beispiel dazu in der Hilfe an.

  • sieht gut aus blicks zwar noch nicht ganz aber ok ^^ mal angucken danke
    *edit öhm wo genau kann man mit dieser funktion denn das fenster angeben in dem man die coordinaten finden will = O?
    *edit2
    nein also mit der funktion geht das nciht vergleich mal die gegebenen koordinaten mit den koordinaten des AutoIt v3 Window Infos

    Einmal editiert, zuletzt von XNeoX (28. Mai 2009 um 16:39)

  • Moin,

    sollte gehen ...:

    Spoiler anzeigen
    [autoit]


    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    ;; Funktion: ControlGetMousePos
    ;; Zweck: Prüft, ob sich die Maus innerhalb eines
    ;; Steuerelements befindet und gibt, falls ja,
    ;; die Position relativ zum Steuerelement zurück.
    ;;
    Func ControlGetMousePos ($hwnd, $controlID)

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

    Local $iMCMold, $aMousePos, $aCtrlPos

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

    ; Maus-Koordinaten relativ zum Anwendungsbereich
    $iMCMold = Opt ("MouseCoordMode", 2)

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

    $aMousePos = MouseGetPos ( )

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

    $aCtrlPos = ControlGetPos ($hwnd, "", $controlID)

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

    If @error == 1 Then _
    Return False

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

    ; x-Achse prüfen
    If ($aMousePos[0] >= $aCtrlPos[0] And _
    $aMousePos[0] <= $aCtrlPos[0]+$aCtrlPos[2]) Then

    ; y-Achse prüfen
    If ($aMousePos[1] >= $aCtrlPos[1] And _
    $aMousePos[1] <= $aCtrlPos[1]+$aCtrlPos[3]) Then

    $aMousePos[0] -= $aCtrlPos[0]
    $aMousePos[1] -= $aCtrlPos[1]
    Opt ("MouseCoordMode", $iMCMold)
    Return $aMousePos
    EndIf
    Else
    Opt ("MouseCoordMode", $iMCMold)
    Return False
    EndIf

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

    EndFunc

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

    ;

    [/autoit]

    Gruß
    Greenhorn


  • Moin,

    Spoiler anzeigen
    [autoit]


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

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

    $iWidth = 300
    $iHeight = 200

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

    $hWndMain = GUICreate ("Testfenster", _
    $iWidth, $iHeight, -1, -1, _
    BitOR ($WS_BORDER, $WS_CAPTION, $WS_SYSMENU, $WS_MINIMIZEBOX, $WS_CLIPCHILDREN), _
    $WS_EX_OVERLAPPEDWINDOW)

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

    $idStatic_1 = GUICtrlCreateLabel ("", 10, 10, $iWidth-20, $iHeight-60)
    $idButton_1 = GUICtrlCreateButton ("Fenster-Info", ($iWidth/2)-40, $iHeight-40, 80)

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

    GUICtrlSetFont ($idStatic_1, 10, 400, 0, "Lucida Console")

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

    GUISetState (@SW_SHOW, $hWndMain)

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

    While True

    Switch GUIGetMsg ( )
    Case -3
    ExitLoop
    Case $idButton_1
    $aPos = ControlGetMousePos ($hWndMain, $idButton_1)
    If IsArray ($aPos) Then
    GUICtrlSetData ($idStatic_1, _
    StringFormat ("xPos = %d\nyPos = %d", _
    $aPos[0], _ ; x
    $aPos[1] )) ; y
    EndIf

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

    EndSwitch
    WEnd

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

    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    ;; Funktion: ControlGetMousePos
    ;; Zweck: Prüft, ob sich die Maus innerhalb eines
    ;; Steuerelements befindet und gibt, falls ja,
    ;; die Position relativ zum Steuerelement zurück.
    ;;
    Func ControlGetMousePos ($hwnd, $controlID)

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

    Local $iMCMold, $aMousePos, $aCtrlPos

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

    ; Maus-Koordinaten relativ zum Anwendungsbereich
    $iMCMold = Opt ("MouseCoordMode", 2)

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

    $aMousePos = MouseGetPos ( )

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

    $aCtrlPos = ControlGetPos ($hwnd, "", $controlID)

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

    If @error == 1 Then _
    Return False

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

    ; x-Achse prüfen
    If ($aMousePos[0] >= $aCtrlPos[0] And _
    $aMousePos[0] <= $aCtrlPos[0]+$aCtrlPos[2]) Then

    ; y-Achse prüfen
    If ($aMousePos[1] >= $aCtrlPos[1] And _
    $aMousePos[1] <= $aCtrlPos[1]+$aCtrlPos[3]) Then

    $aMousePos[0] -= $aCtrlPos[0]
    $aMousePos[1] -= $aCtrlPos[1]
    Opt ("MouseCoordMode", $iMCMold)
    Return $aMousePos
    EndIf
    Else
    Opt ("MouseCoordMode", $iMCMold)
    Return False
    EndIf

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

    EndFunc

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

    Exit (0)
    ;

    [/autoit]

    Gruß
    Greenhorn


  • Und die Kurzversion :P

    [autoit]

    #include <WinAPI.au3>
    Func _MouseInCtrl($hWnd)
    ; Prog@ndy
    If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
    Local $tRECT = _WinAPI_GetWindowRect($hWnd)
    Local $tPOINT = _WinAPI_GetMousePos()
    If _WinAPI_PtInRect($tPOINT,$tPOINT) Then
    Local $aMousePos[2] = [_WinAPI_GetMousePosX(True, $hWnd),_WinAPI_GetMousePosY(True, $hWnd)]
    Return $aMousePos
    EndIf
    Return False
    EndFunc

    [/autoit]