#include <GUIConstantsEx.au3>
#include <GuiEdit.au3>
#include <WinAPIEx.au3>
$fShowCaret = True
$hGUI = GUICreate('Test', 250, 250)
$hEdit = GUICtrlCreateEdit('Test', 5, 5, 230, 195)
$nButtonHide = GUICtrlCreateButton('Hide Caret', 30, 210, 80, 30)
$nButtonShow = GUICtrlCreateButton('Show Caret', 140, 210, 80, 30)
GUIRegisterMsg($WM_COMMAND, 'WM_COMMAND')
GUISetState()
While 1
If Not $fShowCaret Then
$aEdit = _GUICtrlEdit_GetSel($hEdit)
If $aEdit[0] >= 0 Then
_GUICtrlEdit_SetSel($hEdit, -1, -1)
EndIf
EndIf
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $nButtonHide
$fShowCaret = False
Case $nButtonShow
$fShowCaret = True
EndSwitch
WEnd
Func WM_COMMAND($hWnd, $iMsg, $wParam, $lParam)
Switch $hWnd
Case $hGUI
Switch BitAND($wParam, 0xFFFF)
Case $hEdit
Switch BitShift($wParam, 16)
Case $EN_SETFOCUS
If $fShowCaret Then
_WinAPI_ShowCaret($lParam)
Else
_WinAPI_HideCaret($lParam)
EndIf
Case $EN_KILLFOCUS
If $fShowCaret Then
_WinAPI_HideCaret($lParam)
Else
_WinAPI_ShowCaret($lParam)
EndIf
EndSwitch
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_COMMAND