# Function Reference

# WinGetCaretPos

Returns the coordinates of the caret in the foreground window.

WinGetCaretPos ( )

## Return Value

Success: | a 2-element array containing the following information: $aArray[0] = X coordinate $aArray[1] = Y coordinate
Failure: | sets the @error flag to non-zero.

## Remarks

WinGetCaretPos() might not return accurate values for Multiple Document Interface (MDI) applications if absolute CaretCoordMode is used. See example for a workaround. Note: Some applications report static coordinates regardless of caret position!

## Related

CaretCoordMode (Option)

## Example

    Local $aCaretPos = WinGetCaretPos()
    If Not @error Then
        ToolTip("First Method", $aCaretPos[0], $aCaretPos[1])
    EndIf
    Sleep(2000)

    $aCaretPos = _WinGetCaretPos()
    If Not @error Then
        ToolTip("Second Method", $aCaretPos[0], $aCaretPos[1])
    EndIf
    Sleep(2000)

    ; A more reliable method to retrieve the caret coordinates in MDI text editors.
    Func _WinGetCaretPos()
        Local $iXAdjust = 5
        Local $iYAdjust = 40

        Local $iOpt = Opt("CaretCoordMode", 0) ; Set "CaretCoordMode" to relative mode and store the previous option.
        Local $aGetCaretPos = WinGetCaretPos() ; Retrieve the relative caret coordinates.
        Local $aGetPos = WinGetPos("[ACTIVE]") ; Retrieve the position as well as height and width of the active window.
        Local $sControl = ControlGetFocus("[ACTIVE]") ; Retrieve the control name that has keyboard focus.
        Local $aControlPos = ControlGetPos("[ACTIVE]", "", $sControl) ; Retrieve the position as well as the size of the control.
        $iOpt = Opt("CaretCoordMode", $iOpt) ; Reset "CaretCoordMode" to the previous option.

        Local $aReturn[2] = [0, 0] ; Create an array to store the x, y position.
        If IsArray($aGetCaretPos) And IsArray($aGetPos) And IsArray($aControlPos) Then
            $aReturn[0] = $aGetCaretPos[0] + $aGetPos[0] + $aControlPos[0] + $iXAdjust
            $aReturn[1] = $aGetCaretPos[1] + $aGetPos[1] + $aControlPos[1] + $iYAdjust
            Return $aReturn ; Return the array.
        Else
            Return SetError(1, 0, $aReturn) ; Return the array and set @error to 1.
        EndIf
    EndFunc   ;==>_WinGetCaretPos