AutoHotkey スレッド part10

このエントリーをはてなブックマークに追加
53名無しさん@お腹いっぱい。
イベントフックしてキャレットの表示・非表示を拾ってフラグの上げ下げをする。で、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表示無し