作成者 |
メッセージ |
|
|
出かけていたので 返信が遅れました。スミマセン。
なるほど。そうですね!
APIやシステムに詳しくないので ストレートだけでした。
ウィンドゥIDを取得して クリックされたイベントを取得する
ことだけを 考えてました
変化球での回答を いただいて 色々な考え方をしないと
無知は私には 壁が高いと感じました。
初期目的のX、Y座標は 充分得ることができました。
ありがとう ございます
(最初にクリックした位置だけの 取得も満足です)
出かけていたので 返信が遅れました。スミマセン。
なるほど。そうですね! APIやシステムに詳しくないので ストレートだけでした。 ウィンドゥIDを取得して クリックされたイベントを取得する ことだけを 考えてました
変化球での回答を いただいて 色々な考え方をしないと 無知は私には 壁が高いと感じました。
初期目的のX、Y座標は 充分得ることができました。 ありがとう ございます
(最初にクリックした位置だけの 取得も満足です)
|
|
|
投稿記事 |
Posted: 2012年5月11日(金) 07:14 |
|
|
|
|
|
あまりスマートな例ではないけど
ウインドウが非アクティブになったときの座標を取得する。
そのため
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
|
|
|
投稿記事 |
Posted: 2012年5月10日(木) 00:47 |
|
|
|
|
|
早速ありがとうございます
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する予定は ありません よろしく お願いします
|
|
|
投稿記事 |
Posted: 2012年5月09日(水) 07:20 |
|
|
|
|
|
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()を使うと上手く行くんだか行かないんだか。
僕にはよく分かりません。
詳しい人よろしくお願いします。
IEのイベント(?)をこっちのソフトで取得すればいいんですよね・・・
試しにGetWindowProcでウィンドウプロシージャのアドレスを取得してサブクラス化しようとしましたが、必ずエラーが返ってきます。 [code] #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 [/code]
調べてみたところ、こんな問題が [url=http://hpcgi1.nifty.com/MADIA/Vcbbs/wwwlng.cgi?print+200706/07060026.txt]URL[/url]
SetWindowsHookEx()を使うと上手く行くんだか行かないんだか。
僕にはよく分かりません。
詳しい人よろしくお願いします。
|
|
|
投稿記事 |
Posted: 2012年5月09日(水) 01:29 |
|
|
|
|
|
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上で 左クリックした時のマウス座標を 取得したくて 色々調べましたが イマイチ解りません。 ご教授願います
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)
-----------------------
|
|
|
投稿記事 |
Posted: 2012年5月08日(火) 21:35 |
|
|
|
|