DOBON.NET DOBON.NETプログラミング掲示板過去ログ

アプリに埋め込まれたhtmlファイルを表示したい

環境/言語:[WinXP/VB.NET2003/.NET Framework 1.1]
分類:[.NET]

アプリケーション内にhtmlファイルを埋め込んで、
アプリケーション内でそのhtmlファイルを出力させたいのですが
どうすればよいのでしょう?

ActiveXコントロールにMicrosoftのWebブラウザ(Explorer)を追加して
います。これを使った場合、.Navigate2メソッドにて指定されたURLの
htmlファイルをフォームに出力させることができるのですが、
URLで指定しなければならない為、「http://(インターネット上)」か、
あるいは「c:(ハードディスク上)」のどちらかのhtmlファイルしか出力
できません。アプリケーションに埋め込んだhtmlファイルを出力させる
にはどのようにしたらよいのでしょう。
どなたかご指導ご鞭撻の程を宜しくお願い致します。
こんばんは、梅子さん。ピラルクです。

axWebBrowser1.Navigate("res://MyAssem.exe/MyPage.htm"
と"res://"でリソースにアクセスできるみたいですが、
このリソースはマネージリソースではなくWin32リソース
でないとダメみたいです。(区分の詳細は知りませんが)
よって、まず.rdに定義を書いて、rc.exeで.RESファイル
を作って、/win32resourceコンパイルスイッチでリソース
ファイルをexeにアタッチさせてビルドする必要があります。
この一連の作業はVS.NETからでは出来ない(byVS.NET2002)
ようで、vbc.exeコマンドで行う必要があるようです。
※私もトライしてみたのですがこの辺で挫折しました。(^^;
 別Exeに埋め込んだWin32Resourceをres://で取れる
 ことは確認しました。

これが面倒なら、
  Dim am As [Assembly] = [Assembly].GetExecutingAssembly()
  Dim sm As Stream = am.GetManifestResourceStream( _
                     Application.ProductName & ".MyPage.htm")
  Dim sr As New StreamReader(sm)
  Dim s As String = sr.ReadToEnd()
  sr.Close()
でいったん文字列として取り出してワークファイル作るか
でしょうか。
訂正:

> よって、まず.rdに定義を書いて、rc.exeで.RESファイル

.rd でなく.rc 。

MyPage.htm HTML "MyPage.htm"
とテキストで1行書けばOK。
■No2631に返信(ピラルクさんの記事)

お答えいただきありがとうございます。
大変参考になりました。
ただ、まだ不安点があり、
htmlファイルでなく、バイナリファイルを
MicrosoftのWebブラウザ(Explorer)で閲覧したいのです。
この場合、VB.NETでなく、通常のInternetExplorerでは閲覧できるのですが、
VB.NETのコントローラーAxBrowserから閲覧したいと考えているのです。
JavaやFlashなど、ブラウザ上で動くバイナリファイルです。
初めから正確な質問の仕方をせず申し訳ありません。
この場合、埋め込まれたファイルをワークファイルに書き出す際、
バイナリとして書き出して、それにアクセスするようなロジックを
組めばいいのでしょうか?
たびたび質問を重ねてしまってごめんなさい。
追加です。

テキストのみのhtmlでなく、JavaやFlashといったバイナリ型(?)のものを
AxWebBrowser1上で閲覧するのですが、
アプリに埋め込まず、ハードディスク上に存在するものは、閲覧できました。

これをアプリに埋め込みたいのです。
やはり、バイナリ型として一度ワークファイルを作成して
それにアクセスするといった方法でしょうか。
RESファイルはいじったことがないので、とても不安なんです^^;
説明を読ませて頂きましたが、どのような定義が必要なのかわからず、
また、コマンド入力でRESファイルを作るなど私にはとても高度で・・・^^;
ワークファイルを書き出す方法で済みますでしょうか?
こんばんは、梅子さん。ピラルクです。

> ワークファイルを書き出す方法で済みますでしょうか?

それでいいなら、その方が絶対楽です。
・HDDへのアクセスが増えるのがパフォーマンス的に妥協できない
とか
・ファイルに書き出すのがセキュリティ的によろしくない
とかでないなら。
それにAppletだと、codeの書き方が通用するかも未確認。
できたとしても、昨今のプラグイン特許などをかんがみるに、
必要以上に制限のある実装は避けるが吉ではないかと。

ということで、/Win32Resourceは却下(?)ですが、一応
▼How Do I ... Topics: HTML Resource(英語)
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcug98/html/_asug_how_do_i_......_topics.3a_.html_resource.asp
にこれ系の情報と、
GDNJのQuickStartTutorial
▼Windows フォームで ActiveX コントロールをホストする
http://ja.gotdotnet.com/quickstart/winforms/doc/WinFormsAxHosting.aspx
にvbc.exeでのコンパイル方法が載ってます。
(これに /Win32Resource:MyPage.RES を加えることになる)
#でも私はGDNJのAppが起動エラーになって躓いてます。(^^;;

#しかしブラウザ貼ってAppletですか。。。v(^^)←何か企む私
■No2682に返信(ピラルクさんの記事)

お答えいただきありがとうございます。
楽な方の選択肢としてお教え下さった「ファイルに書き出す方法」で
試してみようと思います。

確認として、お返事を書かさせて頂きます。

> ・HDDへのアクセスが増えるのがパフォーマンス的に妥協できない

ゲームを作成しておりますので、ここは起動待ち時間として
多少妥協しようかと思います。

> ・ファイルに書き出すのがセキュリティ的によろしくない

扱うデータが個人情報などではなく、アプリケーション側のデータですので、
製作者である私個人の立場から、書き出す内容を判断したいと思います。

> それにAppletだと、codeの書き方が通用するかも未確認。
> できたとしても、昨今のプラグイン特許などをかんがみるに、
> 必要以上に制限のある実装は避けるが吉ではないかと。
> ということで、/Win32Resourceは却下(?)ですが、一応
> ▼How Do I ... Topics: HTML Resource(英語)
> http://msdn.microsoft.com/library/default.asp?url=/library/en-
> us/vcug98/html/_asug_how_do_i_......_topics.3a_.html_resource.asp
> にこれ系の情報と、
> GDNJのQuickStartTutorial
> ▼Windows フォームで ActiveX コントロールをホストする
> http://ja.gotdotnet.com/quickstart/winforms/doc/WinFormsAxHosting.aspx
> にvbc.exeでのコンパイル方法が載ってます。
> (これに /Win32Resource:MyPage.RES を加えることになる)
> #でも私はGDNJのAppが起動エラーになって躓いてます。(^^;;
> #しかしブラウザ貼ってAppletですか。。。v(^^)←何か企む私

こちらに関しては、今後の私の課題でもあるので是非勉強させて頂きたく
思います。ご指摘ありがとうございました。
ブラウザを貼ったのは、VB初心者である私がVB以外の知識を役立てようと思った
苦肉の策でした^^;
今回の質問については解決できました^^
解決済み!
■No2748に返信(梅子さんの記事)


以前、ここでお教え頂いた通り、
win32リソースを利用する方法を調べましたが、行き詰ってしまいまして
再度質問します。
(ワークファイルを書き出して実行することに成功したので。
 ありがとうございました。スレを変えた方がよろしいのでしょうか・・?)

win32リソースをアタッチしてコンパイルするところまで成功したのですが、
そのリソースをアプリケーションから利用する段階で問題が・・・。
メインアプリではなく、win32リソースをアタッチさせるだけのサブアプリ?を
作ったのですが、メインアプリからこのサブアプリ?内のリソースにアクセス
できません。サブアプリをプロジェクトに取り込む段階で間違いがあるの
かもしれません。

ソリューションエクスプローラーでは、

ソリューション'リソーステスト'(1 プロジェクト)
− リソーステスト
  + 参照設定
    AssemblyInfo.vb
    Form1.vb          ←メインアプリ
− ソリューション項目
    MyRes.exe          ←サブアプリ

のようになっています。Form1.vb内で、"res://MyRes.exe/TEST.txt"
としても、アクセスできませんでした。
MyRes.exeを取り込むだけでなく、.resファイルも取り込まないといけないの
でしょうか? VB.NETのソリューションという概念がよくわかっていない
もので・・・埋め込みなのかコンテンツなのか、等もよろしければ
教えて頂きたいと思っております。
こんばんは、梅子さん。ピラルクです。

> できません。サブアプリをプロジェクトに取り込む段階で間違いがあるの
> かもしれません。

いや、Win32リソースを選択した段階で、もうIDEとは関係ないです。
(当方VS2002の為、VS2003でどうなのかは知りませんが、
変ってないとして)
vbc.exeでコンパイルするので、IDE内ではHTMLページのビルドアク
ションは「なし」です。つまり、IDEの場を借りてHTMLページを編集
したりしないなら、Projectに取り込む必要もないということです。

リソースの参照先Exeが相対Pathになったらどうなるかとかまでは試
していませんが、少なくとも同一フォルダにMyWeb.exe,MyRes.exe
の2つを置いたケースではちゃんと読み出せていましたよ。
■No2805に返信(ピラルクさんの記事)
お答え頂きありがとうございます。
では、メインアプリをIDEで作り、MyApp.exeで書き出した場合、
同一フォルダにMyApp.exeとMyRes.exeをおけばいいんですね
MyApp.exe内から"res://"でMyRes.exeのリソースを取り出すには、
どのような形式で書けばよいのでしょうか?
"res://MyRes.exe/TEST.txt"で読めますか?それとも
"res://MyRes.exe/text/Test.txt"なのでしょうか
(途中に入る、textとは、最初、.rcファイルにて定義した
型?の名前ですが・・.rcファイルに定義する型の名前の部分も
正確でなければならないんですかね?)
こんばんは、梅子さん。ピラルクです。

> 同一フォルダにMyApp.exeとMyRes.exeをおけばいいんですね

相対・絶対(UNC含む)パスも使えるようです。
res://..\res\MDIBrowserRES.exe/example1.html

> MyApp.exe内から"res://"でMyRes.exeのリソースを取り出すには、
> どのような形式で書けばよいのでしょうか?

いいページを見つけました。

▼vb-accelerator Storing and Showing HTML Resources in a VB Application(英語)
http://www.vbaccelerator.com/home/VB/Code/Libraries/Resources/Storing_HTML_Resources_in_VB_Applications/article.asp

DOBON.NET | プログラミング道 | プログラミング掲示板