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

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

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

Re[9]: WebBrowserをユーザーがいじれず閲覧のみにする


(過去ログ 96 を表示中)

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

■56841 / inTopicNo.1)  WebBrowserをユーザーがいじれず閲覧のみにする
  
□投稿者/ たか@WEB屋 (1回)-(2011/02/02(Wed) 23:39:15)

分類:[ASP.NET (C#)] 

C# .net3.5環境です。

WebBrowserコントロールをシステムが自動で動かすツールを作っているのですが
(いわゆるWEB巡回ツールのようなものです)
システムが操作している際にユーザーに操作をされないように制御したいのですがどうすればいいでしょうか?

ユーザーに操作はされたくないですがWebBrowserの画面は見せたいので
Visibleをfalseにするのはダメです。

WebBrowserの上に透明なパネルをのせるとか考えましたがtransparentを設定できるプロパティになさそうですし
どうしようかな?と悩んでここに質問させてもらいました。

いいアイディア、方法があれば教えてください。
よろしくお願いします。
引用返信 編集キー/
■56846 / inTopicNo.2)  Re[1]: WebBrowserをユーザーがいじれず閲覧のみにする
□投稿者/ やじゅ (1830回)-(2011/02/03(Thu) 02:43:43)
やじゅ さんの Web サイト
2011/02/03(Thu) 02:49:42 編集(投稿者)

No56841 (たか@WEB屋 さん) に返信
> WebBrowserの上に透明なパネルをのせるとか考えましたがtransparentを設定できるプロパティになさそうですし
> どうしようかな?と悩んでここに質問させてもらいました。
>
> いいアイディア、方法があれば教えてください。
> よろしくお願いします。

イベントをキャンセルする案
http://stackoverflow.com/questions/381492/how-can-i-make-a-wpf-webbrowser-read-only

透明フォームを重ねるという案
http://bbs.wankuma.com/index.cgi?mode=al2&namber=17579&KLOG=35

WebControlの中身を画像としてキャプチャして、画像として表示する案
http://ufreyr.blog80.fc2.com/blog-entry-4.html


引用返信 編集キー/
■56850 / inTopicNo.3)  Re[2]: WebBrowserをユーザーがいじれず閲覧のみにする
□投稿者/ たか@WEB屋 (1回)-(2011/02/03(Thu) 11:52:10)
No56846 (やじゅ さん) に返信
> 2011/02/03(Thu) 02:49:42 編集(投稿者)
>
> ■No56841 (たか@WEB屋 さん) に返信
>>WebBrowserの上に透明なパネルをのせるとか考えましたがtransparentを設定できるプロパティになさそうですし
>>どうしようかな?と悩んでここに質問させてもらいました。
>>
>>いいアイディア、方法があれば教えてください。
>>よろしくお願いします。
>
> イベントをキャンセルする案
> http://stackoverflow.com/questions/381492/how-can-i-make-a-wpf-webbrowser-read-only
>
> 透明フォームを重ねるという案
> http://bbs.wankuma.com/index.cgi?mode=al2&namber=17579&KLOG=35
>
> WebControlの中身を画像としてキャプチャして、画像として表示する案
> http://ufreyr.blog80.fc2.com/blog-entry-4.html
>
>
引用返信 編集キー/
■56851 / inTopicNo.4)  Re[3]: WebBrowserをユーザーがいじれず閲覧のみにする
□投稿者/ たか@WEB屋 (4回)-(2011/02/03(Thu) 11:54:19)
No56850 (たか@WEB屋 さん) に返信
> ■No56846 (やじゅ さん) に返信
>>2011/02/03(Thu) 02:49:42 編集(投稿者)
>>
>>■No56841 (たか@WEB屋 さん) に返信
> >>WebBrowserの上に透明なパネルをのせるとか考えましたがtransparentを設定できるプロパティになさそうですし
> >>どうしようかな?と悩んでここに質問させてもらいました。
> >>
> >>いいアイディア、方法があれば教えてください。
> >>よろしくお願いします。
>>
>>イベントをキャンセルする案
>>http://stackoverflow.com/questions/381492/how-can-i-make-a-wpf-webbrowser-read-only
>>
>>透明フォームを重ねるという案
>>http://bbs.wankuma.com/index.cgi?mode=al2&namber=17579&KLOG=35
>>
>>WebControlの中身を画像としてキャプチャして、画像として表示する案
>>http://ufreyr.blog80.fc2.com/blog-entry-4.html
>>
>>
引用返信 編集キー/
■56852 / inTopicNo.5)  Re[4]: WebBrowserをユーザーがいじれず閲覧のみにする
□投稿者/ たか@WEB屋 (5回)-(2011/02/03(Thu) 11:57:10)
2011/02/03(Thu) 12:13:05 編集(投稿者)
2011/02/03(Thu) 12:11:36 編集(投稿者)


やじゅ さん
ありがとうございます。

透明のフォームを表示する案を採用してほぼうまくいきました。

が 一点問題は 親フォームが最前面でなくなった場合に透明フォームだけ残ってしまうという問題が解決できません。
最小化されたときはLeaveイベントで透明フォームも消したり移動したときはMoveで移動でうまくいったのですが
ほかのアプリが前面に出てきた場合(たとえばテキストエディタをほかからドラッグしてアプリの上においた場合)
どう判定したらいいのか・・・

もしくはtopMost=trueにしてしまっているからこその問題ですので topMostを使わずに透明フォームを
常に親フォームの一個前に表示する方法があればそれでもいいかもしれません。


なお透明フォーム表示後も 中止ボタンなど親フォームのボタンも押せる必要があるのでShowDialogは使えません。
あと↓の方法も試しましたがこの場合上の現象は解決しましたが 透明ではなくなってしまい使えませんでした。
フォーム内にフォームを表示する
http://dobon.net/vb/dotnet/form/formwithinform.html


なおご提示いただいた他のキャプチャして・・・は自動巡回ツールなので2,3秒ごとに切り替わるため
負荷的に厳しいかなということでやめました。
WebBrowserのイベント処理をキャンセルして・・・は 上記がダメだったらやるつもりですが
自作の自動巡回ライブラリのようなものを使っていて他のツールにも使ってるライブラリで修正範囲が大きくなるので
透明フォームでできれば・・・と思ってます。


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


やったことまとめたソース貼り付けたかったんだけど
ソースがスパム判定ひっかかって書き込めない(涙)
いろいろ試してて上の二つは誤って投稿してしまい また編集キー設定していなかったので削除できませんので無視していただけたら幸いです。


とりあえず半角を全て全角に変えたものを貼り付けます。
読みにくいですがすみません。
(どのワードがスパムフィルタにひっかかったかわかりませんが↓で投稿できるようスパム設定をゆるめていただけるとありがたいです)

■FrmTransparent
this.ControlBox = false;
this.FrmBorderStyle = System.Windows.Frms.FrmBorderStyle.FixedSingle;
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Opacity = 0.01;
this.TopMost = true;

んでプログラム内でゆーざーにいじらせたくない時に
if (frmTrans == null) {
  frmTrans = new FrmTransparent();
}
FrmTransparentInit();

frmTrans.Show();

あとはフォーム移動した時用にMoveイベントで移動するたびに透明フォームも移動する

private void FrmMain_Move(object sender, EventArgs e) {
    FrmTransparentInit();
}
private void FrmTransparentInit() {
    if (frmTrans != null && frmTrans.Visible) {
        frmTrans.Location = new Point(this.Location.X + webBrowser1.Location.X, this.Location.Y + webBrowser1.Location.Y);
        frmTrans.Size = webBrowser1.Size;
    }
}

引用返信 編集キー/
■56881 / inTopicNo.6)  Re[5]: WebBrowserをユーザーがいじれず閲覧のみにする
□投稿者/ たか@WEB屋 (6回)-(2011/02/03(Thu) 17:17:27)
無事解決しました。

上のソースで言うと

透明フォームのtopModeをfalseに戻して変わりにAddOwnedFormで透明フォームをメインフォームの子フォームにすることで
上記の問題点を解決しました。
ありがとうございました。

if (frmTrans == null) {
  frmTrans = new FrmTransparent();
  this.AddOwnedForm(frmTrans);


FrmTransparentInit();

frmTrans.Show();


(またスパムフィルタにひっかかったので全角にしました)
解決済み
引用返信 編集キー/
■56895 / inTopicNo.7)  Re[6]: WebBrowserをユーザーがいじれず閲覧のみにする
□投稿者/ Azulean (683回)-(2011/02/04(Fri) 06:24:27)
ちなみに、Tab キーとか、カーソルキーとか、F5 キーとか、Alt + 左とかで操作できたりしません?
(ユーザー責任と言えばそうですが)
引用返信 編集キー/
■56911 / inTopicNo.8)  Re[7]: WebBrowserをユーザーがいじれず閲覧のみにする
□投稿者/ たか@WEB屋 (7回)-(2011/02/04(Fri) 14:00:59)
2011/02/04(Fri) 18:04:24 編集(投稿者)

No56895 (Azulean さん) に返信
> ちなみに、Tab キーとか、カーソルキーとか、F5 キーとか、Alt + 左とかで操作できたりしません?
> (ユーザー責任と言えばそうですが)

完全に覆ってしまえばwebBrowserをフォーカスできないんで操作できません、、、
と思ったらTab連打でフォーカスできますね(汗
フォーカスしてしまえばF5だろうとショートカットは一通り使えてしまいます。


自分の場合は特にウェブブラウザーの縦スクロールバーだけ使えるよう右側10ピクセルほどwebBrowserがはみ出しているので
(閲覧のみだけどスクロールして確認ぐらいはしてもOKってことで)
スクロールバーを押してフォーカスしてしまうと確かにキー操作できてしまいます(汗

スクロールバーも完全に隠してスクロールバーもどきを自作してしまえば完全に制御できるでしょうが
ページの縦の長さからスクロール幅計算して・・・・とか面倒なんで
まぁそこまでして操作したい人は自己責任で、、、ってことでw


ちなみにイベントをキャンセルする方法だと確かに遷移はしなくて目的は達せられてはいるのですが
リンク上にマウス持ってくとリンクの色が変わったり クリックすると押せたり(押せるけど遷移はしない)
機能としては問題ないけどUIとしてはあまりよくないと思いました。
どうしてクリックできるのに飛べないんだ〜ってかなり違和感あったので^^

画面キャプチャの方法だとスクロールができない(不可能ではないだろうけどものすごく面倒)ってのもあったり・・・


そうすると透明フォーム+イベントキャンセルとかの組み合わせ技が一番確実でUI的にもいいのかなぁ?とは思います。

今回はそこまで要求仕様高くないので自分はやりませんが 今後のご参考までに・・・

解決済み
引用返信 編集キー/
■57001 / inTopicNo.9)  Re[8]: WebBrowserをユーザーがいじれず閲覧のみにする
□投稿者/ picopico (1回)-(2011/02/08(Tue) 15:45:47)
私はWebBrowserをPanel上に配置し、このPanelのEnabledプロパティをFalseにしてこれを実現していますが、
解決済みのようですので参考までに。
解決済み
引用返信 編集キー/
■57216 / inTopicNo.10)  Re[9]: WebBrowserをユーザーがいじれず閲覧のみにする
□投稿者/ たか@WEB屋 (9回)-(2011/02/17(Thu) 14:56:33)
>picopico さん

遅レスで申し訳ないです。
上で解決ボタン押して実際うまくいってたんでこのスレ見てなくて
今コメントいただいてることに気付きました。

そしてパネルのEnabledプロパティを変更するのでうまくできました!!

実装1分orz


これだとUI上もマウスオーバーイベントとかも発生しないので使えないのがユーザーにわかって優しいし
ユーザー操作が一切できずシステムからだけ操作できるって仕様も満たしていて
上で自分がやった方法みたいにキーボードショートカット駆使すれば操作出来ちゃう抜け道もない完ぺきな方法です!
しかも実装が簡単だし・・・


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



No57001 (picopico さん) に返信
> 私はWebBrowserをPanel上に配置し、このPanelのEnabledプロパティをFalseにしてこれを実現していますが、
> 解決済みのようですので参考までに。
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -