イベントフックしてキャレットの表示・非表示を拾ってフラグの上げ下げをする。で、AHKLの#Ifで条件分岐。
だたし、Firefoxなどの独自ウィンドウだと無理。
★1の行まではAutoexecセクションに書くこと
★2の行の最初のセミコロンを外してWinTitleを適宜設定すれば、「キャレットが未表示かつ特定のウィンドウのとき」とできる。
DllCall("SetWinEventHook"
, "UInt", EVENT_OBJECT_SHOW := 0x00008002
, "UInt", EVENT_OBJECT_HIDE := 0x00008003
, "UInt", 0 ; ModuleHandle
, "UInt", RegisterCallback("WinEventProc_ShowHide")
, "UInt", 0 ; All Process
, "UInt", 0 ; All Threads
, "UInt", 0x0003 ; WINEVENT_SKIPOWNTHREAD | WINEVENT_SKIPOWNPROCESS
, "UInt")
; ★1
WinEventProc_ShowHide(hWinEventHook, event, hwnd, idObject, idChild, thread, time) {
global IsCaretShown
If (idObject == 0xFFFFFFF8) ; OBJID_CARET
IsCaretShown := (event == 0x00008002)
}
#If (!IsCaretShown) ; && WinActive(winTitle) ; ★2
e::Tooltip, Caret表示無し