C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[8]: Webbrowserにフォーカスを当てない方法


(過去ログ 10 を表示中)

[トピック内 9 記事 (1 - 9 表示)]  << 0 >>

■1691 / inTopicNo.1)  Webbrowserにフォーカスを当てない方法
  
□投稿者/ ごまさば (1回)-(2007/03/02(Fri) 18:52:34)

分類:[C# (Windows)] 

開発環境 C#2005 Express Edition
          Windows XP SP2

ごまさばと申します。
いつも参考にさせていただいております。

表題の件ですが、現在、指定したURLを指定時間間隔で自動的に巡回するようなブラウザを
開発中です。

そこで問題になっているのが、
「意図しないタイミングでフォームにフォーカスが当たってしまう」
です。

いろいろ調べてみたところ、
 while (webBrowser1.ReadyState != WebBrowserReadyState.Complete)
      {
           Application.DoEvents();
   }
の部分で、フォームにフォーカスが当たってしまっているようなのですが、これを阻止する
方法が分かりません。

初歩的な内容かもしれませんが、ヒントをいただければと思います。

よろしくお願いいたします。

引用返信 編集キー/
■1693 / inTopicNo.2)  Re[1]: Webbrowserにフォーカスを当てない方法
□投稿者/ 渋木宏明(ひどり) (139回)-(2007/03/02(Fri) 19:26:40)
渋木宏明(ひどり) さんの Web サイト
>これを阻止する方法が分かりません。

ブラウザコントロールが自発的に自分にフォーカスを当てなおしてるはずなので、完全に阻止する方法はおそらく無いです。

自分(=コード)でフォーカスを当てなおすしかないんじゃないかな。

引用返信 編集キー/
■1699 / inTopicNo.3)  Re[2]: Webbrowserにフォーカスを当てない方法
□投稿者/ ごまさば (2回)-(2007/03/03(Sat) 10:50:27)
No1693 (渋木宏明(ひどり) さん) に返信
ごまさばです。

ご返信ありがとうございます。

> ブラウザコントロールが自発的に自分にフォーカスを当てなおしてるはずなので、完全に阻止する方法はおそらく無いです。
> 自分(=コード)でフォーカスを当てなおすしかないんじゃないかな。

そうですか。。。
ということは、対策としては、
1.あらかじめ、現在アクティブになっているアプリを調べておいて、
  Application.DoEventsでフォーカスが移動してしまった場合に元に
  戻す。

2.自前でWebbrowserコントロールを作る。

くらいしかないですかね。
2.は私の力では無理っぽいので、1.のやり方を調べてみます;;

ありがとうございました。

引用返信 編集キー/
■1700 / inTopicNo.4)  Re[3]: Webbrowserにフォーカスを当てない方法
□投稿者/ 渋木宏明(ひどり) (140回)-(2007/03/03(Sat) 11:10:17)
渋木宏明(ひどり) さんの Web サイト
> 1.あらかじめ、現在アクティブになっているアプリを調べておいて、
>   Application.DoEventsでフォーカスが移動してしまった場合に元に
>   戻す。

「フォーカスが。。。」という話でしたが、ひょっとしてトップレベルウィンドウのZオーダーまでが変化してしまうという話ですか?

ブラウザコンポーネントは、ウィンドウの前後関係までには手を出さないはずです。

引用返信 編集キー/
■1727 / inTopicNo.5)  Re[4]: Webbrowserにフォーカスを当てない方法
□投稿者/ ごまさば (3回)-(2007/03/04(Sun) 21:20:45)
お世話になります、ごまさばです。

>
> 「フォーカスが。。。」という話でしたが、ひょっとしてトップレベルウィンドウのZオーダーまでが変化してしまうという話ですか?
>
他のアプリケーションを使用していると、突然パッと最前面に出てくるので、そういうことですね。
とりあえずuser32.dllをインポートしてGetForegroundWindowとSetForegroundWindowでしのぎましたが、
ちらっと出てくるのでやはり挙動としてはいまいちです。

> ブラウザコンポーネントは、ウィンドウの前後関係までには手を出さないはずです。
>
ということは、ブラウザが悪さしているのではなく、他の要因なのでしょうか。。
他にやっていて怪しいことといえば、RichTextboxをFocus()・Refresh()していることと、
Labelを記入していることくらいです。

以上、よろしくお願いいたします。


引用返信 編集キー/
■1729 / inTopicNo.6)  Re[5]: Webbrowserにフォーカスを当てない方法
□投稿者/ Hirotow (49回)-(2007/03/04(Sun) 22:11:55)
Hirotow さんの Web サイト
>「フォーカスが。。。」という話でしたが、ひょっとしてトップレベルウィンドウのZオーダーまでが変化してしまうという話ですか?

>ブラウザコンポーネントは、ウィンドウの前後関係までには手を出さないはずです。

ZオーダーというよりはJavaScriptでwindow.focus()されているとかが原因のような気がするのでこのあたりをブロックしてみてはどうでしょうか?
引用返信 編集キー/
■1772 / inTopicNo.7)  Re[6]: Webbrowserにフォーカスを当てない方法
□投稿者/ ごまさば (4回)-(2007/03/05(Mon) 23:31:49)
お世話になります、ごまさばです。

> ZオーダーというよりはJavaScriptでwindow.focus()されているとかが原因のような気がするのでこのあたりをブロックしてみてはどうでしょうか?

なるほど。それも考えられますね。
確かに、必ずしも最前面に出てくるわけではないので、出てくるページのJavaScriptを
チェックしてみます。


ありがとうございました。
引用返信 編集キー/
■1870 / inTopicNo.8)  Re[7]: Webbrowserにフォーカスを当てない方法
□投稿者/ ごまさば (5回)-(2007/03/07(Wed) 19:27:14)
No1772 (ごまさば さん) に返信
お世話になります、ごまさばです。

調べてみたところ、window.focus()が使用されていました。
JavaSprict対策を考えます。

ありがとうございました。
解決済み
引用返信 編集キー/
■1901 / inTopicNo.9)  Re[8]: Webbrowserにフォーカスを当てない方法
□投稿者/ Hirotow (63回)-(2007/03/08(Thu) 15:09:24)
Hirotow さんの Web サイト
2007/03/08(Thu) 15:10:18 編集(投稿者)
2007/03/08(Thu) 15:10:12 編集(投稿者)

No1870 (ごまさば さん) に返信
> ■No1772 (ごまさば さん) に返信
> お世話になります、ごまさばです。
>
> 調べてみたところ、window.focus()が使用されていました。
> JavaSprict対策を考えます。
>
> ありがとうございました。

DocumentCompleted (できたらもっと早い段階)でソースコードを無害化(サニタライズ)するとか。

HtmlElement htmlelm = myBrowser.Document.DocumentElement.Parent;
htmlelm.InnerHTML = htmlelm.InnerHTML.Replace("window.focus()","").Replace("focus()","");

こんな感じでいけると思います。
できたら正規表現で無害化してやったほうがよいです。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -