はじめまして、初心者+1です。
WebBrowser上の指定した場所(座標)をクリックしたくて
「WebBrowserを印刷するには?」
「WebBrowserにEditのテキストを送るには?」
「マウスを使わずにマウスクリックしたい」
「WebBrowserで表示したWebページのあるインプットボックスに移動したい」
などを見て(解かる範囲で)参考にして
SendMessage(Form1.WebBrowser1.Handle, WM_LBUTTONDOWN, 0, MakeLParam(x,y));
SendMessage(Form1.WebBrowser1.Handle, WM_LBUTTONUP, 0, MakeLParam(x,y));
としたのですが、うまくいきません
(インストールすることができなかったのですが
TUIWebBrowserだったらできるのでしょうか・・・?)
カーソルが動いてもかまわないのであれば
mouse_event(MOUSEEVENTF_ABSOLUTE+MOUSEEVENTF_LEFTDOWN,x,y,0,0);
mouse_event(MOUSEEVENTF_ABSOLUTE+MOUSEEVENTF_LEFTUP,x,y,0,0);
というのもありますョ。
TUIWebBrowserは未確認です。
「マウスを使わずにマウスクリックしたい」
これ見てましたね…
失礼しました。
WebBrowser1.Handle は本体のウィンドウハンドルですね。実際にコンテンツが
表示されている部分は、その子の子の部分の'Internet Explorer_Server' ウィンドウです。
procedure TForm1.Button1Click(Sender: TObject);
var
hIE:HWND;
begin
hIE := FindWindowEx(WebBrowser1.Handle,0,'Shell DocObject View',nil);
hIE := FindWindowEx(hIE,0,'Internet Explorer_Server',nil);
if hIE = 0 then exit;
SendMessage(hIE,WM_LBUTTONDOWN,0,MakeLParam(100,100));
SendMessage(hIE,WM_LBUTTONUP,0,MakeLParam(100,100));
end;
こんな感じでうまくいっているようです。試してみると、ちょうどその場所に
あるリンクにジャンプしました。
質問側の分際で返答大変遅れて申し訳ありません!
さっそく試してみたところ、通常のリンクなどはうまくいきました
本当にありがとうございます m(__)m
しかし、今度はフラッシュでできてるリンクは無理でした
これに関しては流石に無理でしょうか・・・?
jokさんに教えていただいたフリーソフトのお陰で、フラッシュはさらに子の
部分の「MacromediaFlashPlayerActiveX」ウィンドウだと分かったので
procedure TForm1.Button1Click(Sender: TObject);
var
hIE:HWND;
X,Y:Integer;
begin
hIE := FindWindowEx(WebBrowser1.Handle,0,'Shell DocObject View',nil);
hIE := FindWindowEx(hIE,0,'Internet Explorer_Server',nil);
hIE := FindWindowEx(hIE,0,'MacromediaFlashPlayerActiveX',nil);
if hIE = 0 then exit;
X := StrToInt(Edit1.Text);
Y := StrToInt(Edit2.Text);
SendMessage(hIE,WM_LBUTTONDOWN,0,MakeLParam(X,Y));
SendMessage(hIE,WM_LBUTTONUP,0,MakeLParam(X,Y));
end;
としたのですが、瞬間的に押したいボタンが点滅(?)するだけで押ささりません。
一体何が足りないんでしょうか?
X,Y は MacromediaFlashPlayerActiveX ウィンドウの左上からの座標になって
ますか? また、そのツールで子ウィンドウのボタンはみえませんか?
>X,Y は MacromediaFlashPlayerActiveX ウィンドウの左上からの座標に
>なってますか?
確認しましたが大丈夫でした
>また、そのツールで子ウィンドウのボタンはみえませんか?
どうやら無いようです(Winspector使用)
>「瞬間的に押したいボタンが点滅(?)するだけ」
他のところでも試してみたところ、点滅ではなくボタンにマウスが来た時
(onmouseoverみたいなもの)のアクションのようでした
> どうやら無いようです(Winspector使用)
どうやら、ウィンドウレスコントロールのようですね。
あまり、助言出来そうもないのですが、そのボタンを本当にマウスで押したとき
MacromediaFlashPlayerActiveX ウィンドウがどんなメッセージを受け取ってるの
かそのツールで分かれば、それをまねできるかも知れませんね。
>どうやら、ウィンドウレスコントロールのようですね。
ウィンドウレスコントロールの意味が分からず調べたのですが
「ウィンドウハンドルを持たないもの」という意味であっているでしょうか?
だとすれば、SendMessageでは無理だという事でしょうか
>そのボタンを本当にマウスで押したときMacromediaFlashPlayerActiveX
> ウィンドウがどんなメッセージを受け取ってるのかそのツールで分かれば
あまりにたくさんのメッセージが表示されて、さらにそれぞれの意味を
調べようとしたのですが全然理解できませんでした(汗
具体的に、WM_LBUTTONDOWN〜UPでてきたのは
WM_IME_SETCONTEXT
WM_SETFOCUS
WM_NCCALCSIZE
WM_WINDOPOSCHANGED
WM_WINDOWPOSCHANGING
WM_NCHITTEST
WM_SETCURSOR
WM_MOUSEMOVE
ですが、ボタンを押すのとはどうも関係なさそうで・・・
>「ウィンドウハンドルを持たないもの」という意味であっているでしょうか?
はい、フラッシュの画面だけじゃなくて、普通にブラウザに表示されるコントロールは
ウィンドウハンドルをもたない、見かけだけのコントロールなようです。
> だとすれば、SendMessageでは無理だという事でしょうか
そうです。ですから、マウスやキーをシミュレートする方法が一番最初に思いつき
ますよね。よく知りませんが、DOM というのを使うと難しそうですが、もっと
確実に出来るようです。以前ちょっと調べたことがありますけど、わたしには
理解出来ませんでした。
> あまりにたくさんのメッセージが表示されて
たしかにクリックと関係なさそう。WM_NCHITTEST があやしいくらいですか。
やっぱり、X,Y の座標が違ってる感じがしますけどね。これ以上はわたしには
アドバイスできそうもありません。すみません。
>DOM というのを使うと難しそうですが、もっと確実に出来るようです
「DOM(Document Object Model)はW3Cで標準化が進められているXMLやHTMLに
アクセスするためのAPIです」という説明を見つけましたけど、APIからよく
理解していないので、まずそこから初めて行こうと思います
>これ以上はわたしにはアドバイスできそうもありません。すみません。
いえいえ、jokさんのおかげで「自動でログインする」という目的が
ほとんど達成されました。
質問をしてからすぐに分かりやすい返答をくれて、とても感謝しています!
普通のページでの任意の座標をクリックする方法は分かったので解決に
チェックをいれ、もしかしたらフラッシュ上の任意の座標をクリックさせる
方法があるかもしれないので、別に新規質問する事にします
ツイート | ![]() |