他アプリケーション上のマウスポインタ座標を取得するには?


若竹  2008-11-02 02:46:58  No: 140778

他アプリケーション上のマウスポインタ座標を取得したいのですが
どのようにすれば良いのでしょうか?
GetCursorPosは画面全体の座標で取得するので無理でした
何か良いAPI等はあるのでしょうか?
調べて見たものの見つかりませんでした
よろしくおねがいします


やじゅ  2008-11-02 06:25:41  No: 140779

このサンプルをもう少し工夫して、座標変換すればいいはず
指定された座標を含むウィンドウのハンドルを取得する(WindowFromPoint)
http://naoko.wankuma.com/win32api/win32api_0010_WindowFromPoint.html


  2008-11-02 06:31:46  No: 140780

他アプリのクライアント座標で取得したいということでしょうか?

それならば、GetCursorPos で得た座標をAPIの ScreenToClient でクライアント座標に変換すれば求められます。

スクリーン座標⇔クライアント座標
http://www5d.biglobe.ne.jp/~tomoya03/shtml/vbapi/ConvertPos.htm


若竹  2008-11-02 11:28:26  No: 140781

>>やじゅさん
開発環境を書き忘れていましたVB6です。
サンプルコードの提供ありがとうございました

>>石さん
ありがとうございます
こんなAPIがあったんですね驚きです
コードを少し改造し

'構造体の定義
Private Type POINT
    x As Long
    y As Long
End Type

'APIの宣言
'マウスカーソルの現在の位置を、スクリーン座標で取得
Private Declare Function GetCursorPos Lib "user32" _
        (lpPoint As POINT) As Long

'hwnd  ウィンドウのハンドルを指定、このクライアント座標が変換される
'スクリーン座標で指定された点の座標を、クライアント座標に変換
Private Declare Function ScreenToClient Lib "user32" _
        (ByVal hwnd As Long, lpPoint As POINT) As Long

'クライアント座標で指定された点の座標を、スクリーン座標に変換
Private Declare Function ClientToScreen Lib "user32" _
       ()

Private Sub Timer1_Timer()
        Dim hwnd
        hwnd = FindWindow(vbNullString, "電卓")
    Dim p As POINT
    Dim msg As String
    
    Call GetCursorPos(p)
    
    Label3.Caption = ScreenToClient(hwnd, p)
    msg = "クライアント座標  " & "(" & p.x & "," & p.y & ")"
    Label2.Caption = msg
End Sub

とすると見事に電卓上の座標を取得してくれました

本当にありがとうございました。


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

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






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