ab.com コミュニティ https://www.activebasic.com/forum/ |
|
IE上のマウスクリック座標を取得したい https://www.activebasic.com/forum/viewtopic.php?t=2962 |
ページ 1 / 1 |
作成者: | wakaba [ 2012年5月08日(火) 21:35 ] |
記事の件名: | IE上のマウスクリック座標を取得したい |
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) ----------------------- |
作成者: | ShellExecute [ 2012年5月09日(水) 01:29 ] |
記事の件名: | そんなに詳しいわけではないですが・・・ |
IEのイベント(?)をこっちのソフトで取得すればいいんですよね・・・ 試しに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()を使うと上手く行くんだか行かないんだか。 僕にはよく分かりません。 詳しい人よろしくお願いします。 |
作成者: | wakaba [ 2012年5月09日(水) 07:20 ] |
記事の件名: | ん~ん 難しいみたいですネ! |
早速ありがとうございます UWSCなどのソフトを使えば簡単だろうと言われるかもしれませんが 必要なのは マウスクリックした時のカーソルの位置(x、y)だけなので。 複雑な事ができるUWSCなどを使わなくても できないかな?と思った からです。 なお 環境を書くのを忘れてました AB:4.24 OS:XP IE:6 OSなどは すぐにVerUPする予定は ありません よろしく お願いします |
作成者: | POINT [ 2012年5月10日(木) 00:47 ] |
記事の件名: | |
あまりスマートな例ではないけど ウインドウが非アクティブになったときの座標を取得する。 そのため 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 |
作成者: | wakaba [ 2012年5月11日(金) 07:14 ] |
記事の件名: | ストレートだけじゃない_? |
出かけていたので 返信が遅れました。スミマセン。 なるほど。そうですね! APIやシステムに詳しくないので ストレートだけでした。 ウィンドゥIDを取得して クリックされたイベントを取得する ことだけを 考えてました 変化球での回答を いただいて 色々な考え方をしないと 無知は私には 壁が高いと感じました。 初期目的のX、Y座標は 充分得ることができました。 ありがとう ございます (最初にクリックした位置だけの 取得も満足です) |
ページ 1 / 1 | 全ての表示時間は UTC+09:00 です |
Powered by phpBB® Forum Software © phpBB Limited https://www.phpbb.com/ |