WebBrowser上の任意の座標をクリックするには?

解決


初心者+1  2004-08-31 05:42:05  No: 10719

はじめまして、初心者+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だったらできるのでしょうか・・・?)


スタテツ  2004-09-02 05:45:25  No: 10720

カーソルが動いてもかまわないのであれば
mouse_event(MOUSEEVENTF_ABSOLUTE+MOUSEEVENTF_LEFTDOWN,x,y,0,0);
mouse_event(MOUSEEVENTF_ABSOLUTE+MOUSEEVENTF_LEFTUP,x,y,0,0);
というのもありますョ。
TUIWebBrowserは未確認です。


スタテツ  2004-09-02 05:48:56  No: 10721

「マウスを使わずにマウスクリックしたい」
これ見てましたね…
失礼しました。


jok  2004-09-02 08:15:58  No: 10722

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;

こんな感じでうまくいっているようです。試してみると、ちょうどその場所に
あるリンクにジャンプしました。


初心者+1  2004-09-05 07:46:31  No: 10723

質問側の分際で返答大変遅れて申し訳ありません!

さっそく試してみたところ、通常のリンクなどはうまくいきました
本当にありがとうございます m(__)m

しかし、今度はフラッシュでできてるリンクは無理でした
これに関しては流石に無理でしょうか・・・?


初心者+1  2004-09-07 04:51:28  No: 10724

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;

としたのですが、瞬間的に押したいボタンが点滅(?)するだけで押ささりません。
一体何が足りないんでしょうか?


jok  2004-09-07 19:30:15  No: 10725

X,Y は MacromediaFlashPlayerActiveX ウィンドウの左上からの座標になって
ますか? また、そのツールで子ウィンドウのボタンはみえませんか?


初心者+1  2004-09-08 03:18:55  No: 10726

>X,Y は MacromediaFlashPlayerActiveX ウィンドウの左上からの座標に
>なってますか? 
確認しましたが大丈夫でした

>また、そのツールで子ウィンドウのボタンはみえませんか?
どうやら無いようです(Winspector使用)

>「瞬間的に押したいボタンが点滅(?)するだけ」
他のところでも試してみたところ、点滅ではなくボタンにマウスが来た時
(onmouseoverみたいなもの)のアクションのようでした


jok  2004-09-08 03:41:54  No: 10727

> どうやら無いようです(Winspector使用)

どうやら、ウィンドウレスコントロールのようですね。
あまり、助言出来そうもないのですが、そのボタンを本当にマウスで押したとき
MacromediaFlashPlayerActiveX ウィンドウがどんなメッセージを受け取ってるの
かそのツールで分かれば、それをまねできるかも知れませんね。


初心者+1  2004-09-08 09:11:59  No: 10728

>どうやら、ウィンドウレスコントロールのようですね。
ウィンドウレスコントロールの意味が分からず調べたのですが
「ウィンドウハンドルを持たないもの」という意味であっているでしょうか?
だとすれば、SendMessageでは無理だという事でしょうか

>そのボタンを本当にマウスで押したときMacromediaFlashPlayerActiveX
> ウィンドウがどんなメッセージを受け取ってるのかそのツールで分かれば
あまりにたくさんのメッセージが表示されて、さらにそれぞれの意味を
調べようとしたのですが全然理解できませんでした(汗
具体的に、WM_LBUTTONDOWN〜UPでてきたのは
WM_IME_SETCONTEXT
WM_SETFOCUS
WM_NCCALCSIZE
WM_WINDOPOSCHANGED
WM_WINDOWPOSCHANGING
WM_NCHITTEST
WM_SETCURSOR
WM_MOUSEMOVE
ですが、ボタンを押すのとはどうも関係なさそうで・・・


jok  2004-09-08 09:57:55  No: 10729

>「ウィンドウハンドルを持たないもの」という意味であっているでしょうか?

はい、フラッシュの画面だけじゃなくて、普通にブラウザに表示されるコントロールは
ウィンドウハンドルをもたない、見かけだけのコントロールなようです。

> だとすれば、SendMessageでは無理だという事でしょうか

そうです。ですから、マウスやキーをシミュレートする方法が一番最初に思いつき
ますよね。よく知りませんが、DOM というのを使うと難しそうですが、もっと
確実に出来るようです。以前ちょっと調べたことがありますけど、わたしには
理解出来ませんでした。

> あまりにたくさんのメッセージが表示されて

たしかにクリックと関係なさそう。WM_NCHITTEST があやしいくらいですか。
やっぱり、X,Y の座標が違ってる感じがしますけどね。これ以上はわたしには
アドバイスできそうもありません。すみません。


初心者+1  2004-09-08 10:37:44  No: 10730

>DOM というのを使うと難しそうですが、もっと確実に出来るようです

「DOM(Document Object Model)はW3Cで標準化が進められているXMLやHTMLに
アクセスするためのAPIです」という説明を見つけましたけど、APIからよく
理解していないので、まずそこから初めて行こうと思います

>これ以上はわたしにはアドバイスできそうもありません。すみません。

いえいえ、jokさんのおかげで「自動でログインする」という目的が
ほとんど達成されました。
質問をしてからすぐに分かりやすい返答をくれて、とても感謝しています!

普通のページでの任意の座標をクリックする方法は分かったので解決に
チェックをいれ、もしかしたらフラッシュ上の任意の座標をクリックさせる
方法があるかもしれないので、別に新規質問する事にします


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

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






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