IE上で 左クリックした時のマウス座標を 取得したくて 色々調べましたが
イマイチ解りません。 ご教授願います
1.ABで作成したソフトを起動後 IEを起動します(手動でOK)
2.ABソフトで 座標取得状態にします
3.IE上のある点を 左(右)クリックします
4.AB作成ソフトで マウス座標を 得る
詳しい人のHPにて 下記のコードを 見つけて一部
変更しています
動作は しますが ABの画面上しか 取得不可です
よろしく お願いします
-------------------------
#N88BASIC
Dim pos As POINTAPI
Dim lpPrevWndProc As VoidPtr
Function MouseProc(hWnd As HWND,dwMsg As DWord,wParam As WPARAM,lParam As LPARAM) As LRESULT
Select Case dwMsg
Case WM_MOUSEMOVE
Case WM_LBUTTONDOWN
GetCursorPos(pos)
MsgBox 0,Str$(pos.x),"マウス座標"
Case WM_RBUTTONDOWN
Case WM_LBUTTONUP
Case WM_RBUTTONUP
Case Else
MouseProc=CallWindowProc(lpPrevWndProc,hWnd,dwMsg,wParam,lParam)
End Select
End Function
lpPrevWndProc=SetWindowLong(_PromptSys_hWnd,GWL_WNDPROC,AddressOf(MouseProc))
'メインのコードここから
Sleep(5000)
'メインのコードここまで
SetWindowLong(_PromptSys_hWnd,GWL_WNDPROC,lpPrevWndProc)
-----------------------
IE上のマウスクリック座標を取得したい
そんなに詳しいわけではないですが・・・
IEのイベント(?)をこっちのソフトで取得すればいいんですよね・・・
試しにGetWindowProcでウィンドウプロシージャのアドレスを取得してサブクラス化しようとしましたが、必ずエラーが返ってきます。
調べてみたところ、こんな問題が
URL
SetWindowsHookEx()を使うと上手く行くんだか行かないんだか。
僕にはよく分かりません。
詳しい人よろしくお願いします。
試しにGetWindowProcでウィンドウプロシージャのアドレスを取得してサブクラス化しようとしましたが、必ずエラーが返ってきます。
コード: 全て選択
#N88BASIC
Dim IEWnd As HWND,IEDefProc As DWord
Function GetError() As String'エラーを取得する関数(勝手に作りました)
Dim lpMsgBuf As BytePtr
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER or FORMAT_MESSAGE_FROM_SYSTEM or FORMAT_MESSAGE_IGNORE_INSERTS,NULL,GetLastError(),LANG_USER_DEFAULT,VarPtr(lpMsgBuf),0,NULL)
GetError=MakeStr(lpMsgBuf)
LocalFree(lpMsgBuf)
EndFunction
IEWnd=FindWindow("IEFrame",NULL)'IEのウィンドウハンドルを取得
IEDefProc=GetWindowLong(IEWnd,GWL_WNDPROC)'アドレスを取得のはず…
SetWindowLong(IEWnd,GWL_WNDPROC,AddressOf(SubClass))'サブクラス化
print IEWnd,IEDefProc,GetError()
'↓サブクラス 右クリでメッセージボックス
Function SubClass(hWnd As HWND, dwMsg As DWord, wParam As WPARAM, lParam As LPARAM) As DWord
If dwMsg = WM_RBUTTONUP Then
MessageBox(_PromptSys_hWnd, "右クリック", "test", MB_OK)
End If
SubClass=CallWindowProc(IEDefProc, hWnd,dwMsg,wParam,lParam)
EndFunction
URL
SetWindowsHookEx()を使うと上手く行くんだか行かないんだか。
僕にはよく分かりません。
詳しい人よろしくお願いします。
ん~ん 難しいみたいですネ!
早速ありがとうございます
UWSCなどのソフトを使えば簡単だろうと言われるかもしれませんが
必要なのは マウスクリックした時のカーソルの位置(x、y)だけなので。
複雑な事ができるUWSCなどを使わなくても できないかな?と思った
からです。
なお 環境を書くのを忘れてました
AB:4.24 OS:XP IE:6
OSなどは すぐにVerUPする予定は ありません
よろしく お願いします
UWSCなどのソフトを使えば簡単だろうと言われるかもしれませんが
必要なのは マウスクリックした時のカーソルの位置(x、y)だけなので。
複雑な事ができるUWSCなどを使わなくても できないかな?と思った
からです。
なお 環境を書くのを忘れてました
AB:4.24 OS:XP IE:6
OSなどは すぐにVerUPする予定は ありません
よろしく お願いします
あまりスマートな例ではないけど
ウインドウが非アクティブになったときの座標を取得する。
そのため
1.IE起動
2ABで作ったウインドウを起動
3、IE上でクリック
するとABで作ったウインドウタイトルに座標が表示される仕組み。
Sub MainWnd_Activate(state As Integer, minimized As Integer)
If state = WA_INACTIVE Then
Dim pos As POINTAPI
Dim s[30] As Byte
GetCursorPos(pos)
wsprintf(s, "x=%d y=%d", pos.x, pos.y)
SetWindowText(hMainWnd, s)
End If
End Sub
ウインドウが非アクティブになったときの座標を取得する。
そのため
1.IE起動
2ABで作ったウインドウを起動
3、IE上でクリック
するとABで作ったウインドウタイトルに座標が表示される仕組み。
Sub MainWnd_Activate(state As Integer, minimized As Integer)
If state = WA_INACTIVE Then
Dim pos As POINTAPI
Dim s[30] As Byte
GetCursorPos(pos)
wsprintf(s, "x=%d y=%d", pos.x, pos.y)
SetWindowText(hMainWnd, s)
End If
End Sub
ストレートだけじゃない_?
出かけていたので 返信が遅れました。スミマセン。
なるほど。そうですね!
APIやシステムに詳しくないので ストレートだけでした。
ウィンドゥIDを取得して クリックされたイベントを取得する
ことだけを 考えてました
変化球での回答を いただいて 色々な考え方をしないと
無知は私には 壁が高いと感じました。
初期目的のX、Y座標は 充分得ることができました。
ありがとう ございます
(最初にクリックした位置だけの 取得も満足です)
なるほど。そうですね!
APIやシステムに詳しくないので ストレートだけでした。
ウィンドゥIDを取得して クリックされたイベントを取得する
ことだけを 考えてました
変化球での回答を いただいて 色々な考え方をしないと
無知は私には 壁が高いと感じました。
初期目的のX、Y座標は 充分得ることができました。
ありがとう ございます
(最初にクリックした位置だけの 取得も満足です)