他プログラムのCaret位置を正確に知るには?


Qua-Chan  2006-06-25 12:43:52  No: 95840

VBのTEXTBOX内ではなく、他の起動しているプログラムでの入力位置を調べたいのです。
例としまして、顧客管理ソフトを起動中に、F11を押すと、特定の作業をする、といったイメージのプログラムを考えています。
その時、作業Windowsを、現在入力中のカーソル付近にPOPUPさせたいのです。
何とかCaretに関するAPIは見つけたのですが、どうしてもずれが出ます。
どこが間違っているのでしょうか?

rethd = GetForegroundWindow()
p = GetWindowRect(rethd, rct)
retTred = GetWindowThreadProcessId(rethd, lpdwProcessID)
Me.Top = (rct.Top + RetInfo.rcCaret.Top) * Screen.TwipsPerPixelY
Me.Left = (rct.Left + RetInfo.rcCaret.Left) * Screen.TwipsPerPixelX

特にY位置のずれが激しいのですが、何か必要な要素を忘れているのでしょうか?


Qua-Chan  2006-06-25 12:50:06  No: 95841

type宣言です。
Private Type RECT
        Left As Long
        Top As Long
        Right As Long
        Bottom As Long
End Type
Private Type GUITHREADINFO
    cbSize As Long
    flags As Long
    hwndActive As Long
    hwndFocus As Long
    hwndCapture As Long
    hwndMenuOwner As Long
    hwndMoveSize As Long
    hwndCaret As Long
    rcCaret As RECT
End Type


Hongliang  URL  2006-06-25 21:54:07  No: 95842

GetGUIThreadInfo で取得できる rcCaret は、hwndCaret が示すウィンドウ(コントロール)のクライアント座標で表されます。親フォームのクライアント座標ではありません。
クライアント座標をスクリーン座標に変換するには API の ClientToScreen 関数が便利です。


Qua-Chan  2006-06-25 22:03:17  No: 95843

Hongliangさん、ありがとうございます。
ClientToScreen早速探してみます。
親フォームのクライアント座標はどうして取得できるのでしょうか?
とりあえず、いろいろと試してみます。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加