tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトルWebBrowserコントロールによるWebページにつきまして
記事No16394
投稿日: 2018/02/11(Sun) 11:17
投稿者susu
お世話になります。

WebBrowserコントロールによるWebページにつきまして

以下のWebページを参考にして、ご質問致します。
http://hanatyan.sakura.ne.jp/vb6/internet03.htm

WebBrowser1.Navigate "http://hanatyan.sakura.ne.jp/top.htm"
   ↓以下に変更しました。
WebBrowser1.Navigate "http://jp.hao123.com/"
  また
WebBrowser1.Silent=True  'スクリプト エラー防止の為に追加しました。
  

概要
コントロールを使用しないWebBrowserのWebページでは「行きたいサイトにすぐ行けるポータルサイト"Hao123"」
の右側に「温度、曜日、時間」が表示されますが、WebBrowserコントロールの Webページには「温度、曜日、時間」
が表示されません。


質問
WebBrowserコントロールのwebページでは「温度、曜日、時間」が表示されませんが、
どのような理由によって同じ表示がされないのでしょうか。

以上につきまして、宜しくお願い致します。

環境 OS:Windows XP/7/8/10   VB 6.0 VB歴は長いのですが詳しくはありません。

[ツリー表示へ]
タイトルRe: WebBrowserコントロールによるWebページにつきまして
記事No16395
投稿日: 2018/02/13(Tue) 15:49
投稿者魔界の仮面弁士
# Baidu(バイドゥ)の hao123 とか久しぶりに見た…


> WebBrowser1.Navigate "http://jp.hao123.com/"

IE8 以上であれば、hao123 で「温度、曜日、時間」が表示されますが、
IE7 以下の環境では表示されません。
IE バージョンが古い場合には、ブラウザーの更新を行ってください。


> 環境 OS:Windows XP/7/8/10   VB 6.0 VB歴は長いのですが詳しくはありません。

No16373 で書いた逆質問を、もう一度繰り返させて頂きますね。

http://hanatyan.sakura.ne.jp/vb60bbs/wforum.cgi?mode=allread&no=16371#16373

>>> 普通は 8.1 だと思いますが…本当に 8 ですか?
>>> 以下、サポートされている組み合わせ。
>>>
>>> Windows 2000 ⇒ IE5(標準) / IE5.5 / IE6
>>> Windows XP   ⇒ IE6(標準) / IE7 / IE8
>>> Windows Vista⇒ IE7(標準) / IE8 / IE9
>>> Windows 7    ⇒ IE8(標準) / IE9 / IE10 / IE11
>>> Windows 8    ⇒ IE10(標準)
>>> Windows 8.1  ⇒ IE11(標準)
>>> Windows 10   ⇒ IE11(標準) / Edge(標準)


で、ここから本題。


>  コントロールを使用しないWebBrowserのWebページでは

もしかして「Internet Explorer でアクセスした場合」と
「WebBrowser でアクセスした場合」を比較しているのでしょうか。

VB6 で使う WebBrowser とは ActiveX コントロール の名前なので、
 『コントロールを使用しないWebBrowserのWebページ』
という説明だと、意味が通らなくなってしまいますね。


さて、WebBrowser コントロールというのは、特に設定しない限りは
IE7 モードでページを表示しますので、これが原因かと思います。
先に述べたとおり、hao123 のサイトは、IE7 以下だと正しくレンダリングされません。


WebBrowser の IE モードを変更するために、レジストリの
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION
の下に、アプリケーションのファイル名を DWORD 値のエントリーとして記述してみてください。

ここでいうファイル名とは、たとえば「Project1.exe」のことです。
開発環境からデバッグ実行する場合に備え、「vb6.exe」も追加しておくと良いでしょう。

対応する DWORD 値には、IE の動作モードを示す値を指定します。
たとえば今回の場合なら、10進数で「9999」などと指定すれば OK です。
レジストリを書き換えた後は、該当アプリケーションを起動しなおすことも忘れずに。

詳細は下記をご覧ください。
https://msdn.microsoft.com/library/ee330730.aspx#browser_emulation

[ツリー表示へ]
タイトルRe^2: WebBrowserコントロールによるWebページにつきまして
記事No16396
投稿日: 2018/02/13(Tue) 16:10
投稿者susu
魔界の仮面弁士  様

返答をして頂きましてありがとうございました。

少し整理してから再度、ご返答を致します。

回答をして下さいまして本当にありがとうございました。

[ツリー表示へ]
タイトルRe^3: WebBrowserコントロールによるWebページにつきまして
記事No16398
投稿日: 2018/02/13(Tue) 16:49
投稿者susu
魔界の仮面弁士 様

お世話になります。

>普通は 8.1 だと思いますが…本当に 8 ですか?
>以下、サポートされている組み合わせ。
>ゆえに今回のケースでは、IE6 と IE11 のみを対象とするのなら、
> Windows XP + IE6、Windows 7/8.1/10 + IE11
>になるはずで、Windows 8 の出番は無さそうですが。
はい、8.1です。Windows 8 の出番は有りません。
良くソフト一覧にはWindows10/8/7/Vista/XP/2000/NTとあり
8.1はあまり見かけません。また、自分勝手に8.1は一般的に8で通用するものと思い込んでいました。


>もしかして「Internet Explorer でアクセスした場合」と
>「WebBrowser でアクセスした場合」を比較しているのでしょうか。
はい、その通りです。今回までは同じ内容で表示するものと思と込んでいました。

>VB6 で使う WebBrowser とは ActiveX コントロール の名前なので、
> 『コントロールを使用しないWebBrowserのWebページ』
>という説明だと、意味が通らなくなってしまいますね。
はい、済みません。その点に関しては知識に欠けていました。

>さて、WebBrowser コントロールというのは、特に設定しない限りは
>IE7 モードでページを表示しますので、これが原因かと思います。
>先に述べたとおり、hao123 のサイトは、IE7 以下だと正しくレンダリングされません。
色々、hao123で調べて見ましたが、分りませんでした。
[IE7 モードでページを表示します]は全く知りませんでした。IE7は大変な情報でした。


以下につきましては、再度、ご報告させてもらいます。

>WebBrowser の IE モードを変更するために、レジストリの
>HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION
>の下に、アプリケーションのファイル名を DWORD 値のエントリーとして記述してみてください。

>ここでいうファイル名とは、たとえば「Project1.exe」のことです。
>開発環境からデバッグ実行する場合に備え、「vb6.exe」も追加しておくと良いでしょう。

>対応する DWORD 値には、IE の動作モードを示す値を指定します。
>たとえば今回の場合なら、10進数で「9999」などと指定すれば OK です。
>レジストリを書き換えた後は、該当アプリケーションを起動しなおすことも忘れずに。

旅重ね、ありがとうございました。

[ツリー表示へ]
タイトルRe^4: WebBrowserコントロールによるWebページにつきまして
記事No16399
投稿日: 2018/02/13(Tue) 18:48
投稿者susu
魔界の仮面弁士 様

お世話になります。

ご指導して頂きました方法につきましてご報告致します。

>WebBrowser の IE モードを変更するために、レジストリの
>HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION
>の下に、アプリケーションのファイル名を DWORD 値のエントリーとして記述してみてください。
>ここでいうファイル名とは、たとえば「Project1.exe」のことです。
WindowsXP、Windows10及びWindows8.1(FEATURE_BROWSER_EMULATIONが有りませんでしたので追加しました)

       以下のWebページで試しました。
http://hanatyan.sakura.ne.jp/vb6/internet03.htm

WebBrowser1.Navigate "http://hanatyan.sakura.ne.jp/top.htm"
   ↓以下に変更しました。
WebBrowser1.Navigate "http://jp.hao123.com/"
  また
WebBrowser1.Silent=True  'スクリプト エラー防止の為に追加しました。

WindowsXP(IE8)/8.1(IE11)/10(IE11)に於いて「行きたいサイトにすぐ行けるポータルサイト"Hao123"」の右側に
「温度、曜日、時間」が表示されるようになりました。
>開発環境からデバッグ実行する場合に備え、「vb6.exe」も追加しておくと良いでしょう。
「vb6.exe」も追加してデバッグを実行しますと同じく「温度、曜日、時間」が表示されるようになりました。

>さて、WebBrowser コントロールというのは、特に設定しない限りは
>IE7 モードでページを表示しますので、これが原因かと思います。
>先に述べたとおり、hao123 のサイトは、IE7 以下だと正しくレンダリングされません。
IE8〜11に対応のないサイトも利用できるように、IE7と同等のレンダリングモード機能
が関係していることが分りました。また、ご指摘のWebBrowser コントロールというのは、
特に設定しない限りIE7 モード(WebBrowser コントロール=IE7)は、大変勉強になりました。

今回、解決することができました。詳細な説明をして頂きまして迷い無くできました。
いつも本当に感謝申し上げます。

[ツリー表示へ]
タイトルRe^5: WebBrowserコントロールによるWebページにつきまして
記事No16400
投稿日: 2018/02/13(Tue) 21:18
投稿者魔界の仮面弁士
> 色々、hao123で調べて見ましたが、分りませんでした。

IE8 以降の Internet Explorer (≠ WebBrowser) においては、
[F12] キーで開発者ツールを起動すると、IE の互換モードを
実行時に動的に変更することが出来るようになっています。

Internet Explorer の互換モードについての詳しい解説は避けますが、
F12 開発者ツールから、今回のサイトを IE7互換モードでレンダリングさせると、
温度等が表示されなくなることを簡単に確認できますので、試してみてください。



> 8.1は一般的に8で通用するものと思い込んでいました。

一般ユーザー視点の場合は、その認識でも大丈夫なこともありますが、
Windows 8 と 8.1 は、左下のスタートボタンの有無や IE のバージョンなど、
実際にはいろいろと違いのある OS ですよね。

ゆえにソフトウェア開発という立場の場合は、できる限り
マイナーバージョンの違いも意識しておいた方が良いかと思います。
それゆえ、あえて以前と同様の指摘を繰り返させていただきました。


OS のサポート期限という目線で見た場合にも、
Windows 8 と 8.1 とでは大きく異なりますし。(下記の★)

 2014/04/08 Windows XP SP3 の延長サポート終了
 2015/01/13 Windows 7 / Windows Server 2008 SP2 / 2008 R2 のメインストリームサポート終了
 2015/07/14 Windows Server 2003 SP2 / 2003 R2 SP2 の延長サポート終了
★2016/01/12 Windows 8 のサポート終了
 2017/04/11 Windows Vista SP2 の延長サポート終了
 2017/05/09 Windows 10 ver1507 の延長サポート終了
 2017/10/10 Windows 10 ver1511 (November Update) の延長サポート終了
☆2018/01/09 Windows 8.1 / Windows Server 2012 / 2012 R2 のメインストリームサポート終了
  《今ココ》
 2018/04/10 Windows 10 ver1607 (Anniversary Update) の延長サポート終了
 2018/10/09 Windows 10 ver1703 (Creators Update) の延長サポート終了
 2019/04/09 Windows 10 ver1709 (Fall Creators Update) の延長サポート終了
 2020/01/14 Windows 7 SP1 / Windows Server 2008 SP2 / 2008 R2 SP2 の延長サポート終了
 2022/01/11 Windows Server 2016 のメインストリームサポート終了
★2023/01/10 Windows 8.1 / Windows Server 2012 / 2012 R2 の延長サポート終了
 2027/01/11 Windows Windows Server 2016 の延長サポート終了



> WebBrowser の IE モードをレジストリで変更して
>「vb6.exe」実行ファイルを作成してもレジストリで変更されなければ

ごめんなさい、質問の意味が良く分かりませんでした。
「レジストリで変更して作成しても、レジストリで変更されなければ」
というのはどういう意味でしょうか。


たとえコンパイルされた時の名前が Project1.exe であったとしても、
実行前に ProjectTest.exe にリネームしてから実行したのであれば、
参照されるのは FEATURE_BROWSER_EMULATION\ProjectTest.exe のエントリです。


もし、レジストリを設定したく無い、という意図だとしたら、
下記を参照してみてください。茨の道となるでしょうからおすすめはしませんが。
https://social.technet.microsoft.com/Forums/ja-JP/19d08838-4463-453e-8248-608e708e6e77/




> 「温度、曜日、時間」が表示されないと思って良いでしょうか。

ブラウザーバージョンによって、JavaScript やスタイルシートの解釈に差があるため、
古いバージョンだと正しく動作しないのでしょう。

温度情報では、AccuWeather の Web API がベースになっているらしく、
クリックすると AccuWeather の都市別長期予報ページにジャンプしますね。
https://www.accuweather.com/ja/jp/japan-weather


この Web API の仕様やライセンスに関しては、
https://developer.accuweather.com
などで見ることができるかと思いますが、私自身は調べてはいません。


なお hao123 にアクセスすると、当方では「晴」「東京」「10° / 1°」と表示されました。
ブラウザーの通信処理をざっと眺めてみたところ、これは JavaScript によって動的に
別サイトの /js/weather/2-226396_1_AL.js が呼び出され、これから返される
 {
  "date" : "2018-2-13",
  "day" : { "hi" : 10, "low" : 1.1, "icon": "sunny", …}
 },
 {
  "date" : "2018-2-14",
  "day" : { "hi" : 12.2, "low" : 6.7, "icon" : "sunny", …}
 }
などの情報を表示しているように見受けられます。
ちなみに sunny のアイコンは
 http://jp.hao123.com/resource/fe/weather/headerTest/new-small/1/sunny.png
らしいです。


また、天気の URL にある "2-226396_1_AL.js" ですが、これは都市コードらしく、
 http://jp.hao123.com/static/common/widget/header-flat/weather/jp/weather-city.json
に基づいているようでした。このアドレスからは
 {…, "1523" : "網代", …, "2-226396_1_AL" : "東京", …, "10-225007_1_AL" : "大阪", …}
といった JSON 文字列が返却されています。

※実際には "東京" や "大阪" ではなく、"\u6771\u4eac" や "\u5927\u962a" などの表記。

[ツリー表示へ]
タイトルRe^6: WebBrowserコントロールによるWebページにつきまして
記事No16401
投稿日: 2018/02/13(Tue) 23:13
投稿者susu
魔界の仮面弁士  様

度重ね、返答をして頂きましてありがとうございました。

>IE8 以降の Internet Explorer (≠ WebBrowser) においては、
>[F12] キーで開発者ツールを起動すると、IE の互換モードを
>実行時に動的に変更することが出来るようになっています。

>Internet Explorer の互換モードについての詳しい解説は避けますが、
>F12 開発者ツールから、今回のサイトを IE7互換モードでレンダリングさせると、
>温度等が表示されなくなることを簡単に確認できますので、試してみてください。
ありがとうございす。明日から試して確認してみます。

>マイナーバージョンの違いも意識しておいた方が良いかと思います。
>それゆえ、あえて以前と同様の指摘を繰り返させていただきました。
はい、分りました。今後はWindows 8 と 8.1 を意識して取り組んで行きたいと思います。
また、こんなに大きく異なっていることも知ることができました。

>ごめんなさい、質問の意味が良く分かりませんでした。
>「レジストリで変更して作成しても、レジストリで変更されなければ」
>というのはどういう意味でしょうか。
済みません。
質問の意味はレジストリ変更を実行ファイルに含ませる様な事はできないものかと思いましたが、
レンダリングの意味を知り矛盾を感じて修正により途中で削除致しました。申し訳ありませんでした。


>> 「温度、曜日、時間」が表示されないと思って良いでしょうか。

>ブラウザーバージョンによって、JavaScript やスタイルシートの解釈に差があるため、
>古いバージョンだと正しく動作しないのでしょう。
はい、分りました。

以下につきましても、知りたかったことで、きっかけを得ることができました。
明日からジックリ[F12] キーで開発者ツールを含め学んでみます。

>温度情報では、AccuWeather の Web API がベースになっているらしく、
>クリックすると AccuWeather の都市別長期予報ページにジャンプしますね。
> https://www.accuweather.com/ja/jp/japan-weather

>この Web API の仕様やライセンスに関しては、
> https://developer.accuweather.com
>などで見ることができるかと思いますが、私自身は調べてはいません。

>なお hao123 にアクセスすると、当方では「晴」「東京」「10° / 1°」と表示されました。
>ブラウザーの通信処理をざっと眺めてみたところ、これは JavaScript によって動的に
>別サイトの /js/weather/2-226396_1_AL.js が呼び出され、これから返される
> {
>  "date" : "2018-2-13",
>  "day" : { "hi" : 10, "low" : 1.1, "icon": "sunny", …}
> },
> {
>  "date" : "2018-2-14",
>  "day" : { "hi" : 12.2, "low" : 6.7, "icon" : "sunny", …}
> }
>などの情報を表示しているように見受けられます。
>ちなみに sunny のアイコンは
>  http://jp.hao123.com/resource/fe/weather/headerTest/new-small/1/sunny.png
>らしいです。

>また、天気の URL にある "2-226396_1_AL.js" ですが、これは都市コードらしく、
>  http://jp.hao123.com/static/common/widget/header-flat/weather/jp/weather-city.json
>に基づいているようでした。このアドレスからは
>{…, "1523" : "網代", …, "2-226396_1_AL" : "東京", …, "10-225007_1_AL" : "大阪", …}
>といった JSON 文字列が返却されています。

>※実際には "東京" や "大阪" ではなく、"\u6771\u4eac" や "\u5927\u962a" などの表記。

WebBrowser の IE モードを変更する為のレジストリ変更、レンダリングモード、(WebBrowser コントロール=IE7)
Windows 8 と 8.1 OSが大きく異なりる違いなど、この度は実際に、ご指導、ご指摘により
WebBrowserコントロールによるWebページ表示の原因が分りました。
本当にありがとう御座いました。心より感謝申し上げます。

[ツリー表示へ]
タイトルRe^7: WebBrowserコントロールによるWebページにつきまして
記事No16402
投稿日: 2018/02/14(Wed) 14:22
投稿者魔界の仮面弁士
> 質問の意味はレジストリ変更を実行ファイルに含ませる様な事はできないものかと思いましたが、

実行時に設定することも出来ますよ。たとえば

 regKey = "HKCU\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION\"
 regKey = regKey & App.EXEName & ".exe"
 On Error Resume Next
 value = CreateObject("WScript.Shell").RegRead(regKey)
 On Error GoTo 0
 MsgBox value

のようにして現在値を読み取ったり、

 CreateObject("WScript.Shell").RegWrite regKey, 9999&, "REG_DWORD"

としてレジストリに書き込んだりすることができます。


といっても、設定反映にはアプリの再起動が必要なので、
必要に応じて、再起動の処置を組み込む必要はあります。


Public Sub Main()
 'ここが上記のレジストリ書き換え処理。レジストリを修正した場合は True、無加工なら False を返す。
 If FixFeatureBrowserEmulation() Then

  'レジストリ設定が変更されたので再起動
  Call Restart()
  '自分自身は、後は何もせずにアプリ終了
  Exit Sub
 End If
    
 '
 'レジストリが変更済みの場合は、ここに到達するので、
 '本来の処理(フォームの起動など)をここに記述しておく。
 '
End Sub

'自身をもう一つ起動する。ここには自身の終了処理は含まれない。
Private Sub Restart()
 Dim s As String
 s = App.Path
 If Right(s, 1) <> "\" Then
  s = s & "\"
 End If
 s = """" & s & App.EXEName & ".exe"" " & Command()
 Shell s, vbNormalFocus
End Sub



上記は、exe から実行した場合向けのコードとなっています。

上記を応用すれば、vb6.exe の登録も同様に組み込めるのですが、デバッグ実行時に
開発中のプロジェクトが再起動させてしまうのも、いささか都合が悪いかと思いますので、
開発環境の vb6.exe については、手動で登録を行った方が良いと思います。


> レンダリングの意味を知り矛盾を感じて修正により途中で削除致しました。

この手のレジストリ操作はアプリ実行時にはなく、
アプリケーションのインストーラーに任せるのが良いでしょうね。

ちなみに FEATURE_BROWSER_EMULATION の設定ですが、
HKEY_CURRENT_USER の代わりに HKEY_LOCAL_MACHINE に組み込むこともできます。

[ツリー表示へ]
タイトルRe^8: WebBrowserコントロールによるWebページにつきまして
記事No16403
投稿日: 2018/02/14(Wed) 15:52
投稿者susu
魔界の仮面弁士 様

度重ね、ご返信をして頂きまして、ありがとうがざいました。


>> 質問の意味はレジストリ変更を実行ファイルに含ませる様な事はできないものかと思いましたが、

>実行時に設定することも出来ますよ。たとえば
出来ますか。はい、分りました。

>regKey = "HKCU\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION\"
>regKey = regKey & App.EXEName & ".exe"
>On Error Resume Next
>value = CreateObject("WScript.Shell").RegRead(regKey)
>On Error GoTo 0
>MsgBox value

>のようにして現在値を読み取ったり、

 >CreateObject("WScript.Shell").RegWrite regKey, 9999&, "REG_DWORD"

>としてレジストリに書き込んだりすることができます。
>> レンダリングの意味を知り矛盾を感じて修正により途中で削除致しました。

>この手のレジストリ操作はアプリ実行時にはなく、
>アプリケーションのインストーラーに任せるのが良いでしょうね。
はい、分りました。

>ちなみに FEATURE_BROWSER_EMULATION の設定ですが、
>HKEY_CURRENT_USER の代わりに HKEY_LOCAL_MACHINE に組み込むこともできます。
はい、分りました。


下記の参考は大変助かります。

>Public Sub Main()
 >  '
 >  '
>End Sub

>上記を応用すれば、vb6.exe の登録も同様に組み込めるのですが、デバッグ実行時に
>開発中のプロジェクトが再起動させてしまうのも、いささか都合が悪いかと思いますので、
>開発環境の vb6.exe については、手動で登録を行った方が良いと思います。
はい、分りました。

あまり、レジストリで作ったことは無く詳しくありません。理由はレジストリを間違えて編集しますと
再インストールが必要になる可能が高くなるのではないのかと不安があります。
今回は、レジストリを実行ファイルに組み込む事でレジストリ編集が無くなり効率、安心感が高まります。

勉強も兼ねて、ご指摘を参考にして挑戦してみます。時間は、がかかると思われますが、ご報告をさせてもらいます。

色々と、ご指導をして頂きまして、感謝申し上げます。

[ツリー表示へ]
タイトルRe^9: WebBrowserコントロールによるWebページにつきまして
記事No16404
投稿日: 2018/02/14(Wed) 16:14
投稿者susu
魔界の仮面弁士  様

お世話になります。

ご指導してもらいました下記の方法で、問題なくできました。

>regKey = "HKCU\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION\"
>regKey = regKey & App.EXEName & ".exe"
>On Error Resume Next
>value = CreateObject("WScript.Shell").RegRead(regKey)
>On Error GoTo 0
>MsgBox value

>のようにして現在値を読み取ったり、

>CreateObject("WScript.Shell").RegWrite regKey, 9999&, "REG_DWORD"

>としてレジストリに書き込んだりすることができます。

きちんと出来ましたら再度、ご報告させてもらいます。

[ツリー表示へ]
タイトルRe^10: WebBrowserコントロールによるWebページにつきまして
記事No16405
投稿日: 2018/02/14(Wed) 20:32
投稿者susu
魔界の仮面弁士 様

お世話になります。

終了時に作成した名前の削除につきまして、ご質問を致します。

レジストリにつきましては詳しくありませんが
下記の方法は自分が行いたい方法でした。ありがとうございました。

Private Sub Form_Load()

>Dim regKey As String                      
>regKey = "HKCU\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION\"
>regKey = regKey & App.EXEName & ".exe"
>On Error Resume Next
>Value = CreateObject("WScript.Shell").RegRead(regKey)
>On Error GoTo 0
>MsgBox Value
>CreateObject("WScript.Shell").RegWrite regKey, 9999&, "REG_DWORD"

End Sub

終了時には作成した名前("Project1.exe")を削除したいと思っています。
既に同名で作成されていた場合は削除しないように考えています。

終了
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)

Call DeleteSetting(" ", " ", "Project1.exe")

End Sub

質問
終了時の"  "に何を記述すれば分かりませんでした。
色々と、"  "に記述して試しましたが分かりませんでした。

ご指導して頂けますと幸いであります。

[ツリー表示へ]
タイトルRe^11: WebBrowserコントロールによるWebページにつきまして
記事No16406
投稿日: 2018/02/15(Thu) 17:16
投稿者魔界の仮面弁士
> 終了時には作成した名前("Project1.exe")を削除したいと思っています。

何故削除したいのでしょうか?

FEATURE_BROWSER_EMULATION は、起動時に読み込まれる設定なのですから、
起動する前には既にレジストリに書き込んだ状態でなければなりません。

そのため先の例では、レジストリ設定後にアプリを再起動する仕組みを設けています。

再起動、ということは、そのアプリは一旦終了してしまうわけですから、
そこで削除してしまうのは都合が悪いと思うのですが。


どうしても動的に生成・削除したいのであれば、レジストリを操作するアプリと
そこから呼び出されるアプリを別の exe に分けてしまうのはどうでしょう。

どうしても exe を一つにまとめたいなら、それが再起動なのかどうかの判断のため、
再起動時にコマンドライン オプションを付与するようにし、再起動されたかどうかを
Command 関数の戻り値で If 判定するようにするといった方法はあります。


ただしいずれの方法を使うにしても、アプリ起動中に強制終了した場合に
レジストリが削除されずに残ってしまうことを許容できるのかどうか、とか、
Project1.exe が複数起動された場合にどのように振舞うのか、といった点について
しっかりと検討しておかねばならないでしょう。



> 既に同名で作成されていた場合は削除しないように考えています。
起動時に RegRead しておけば、そのエントリが起動前に作成済みかどうかを調べられますね。
作成済みで無かった場合には、終了時に削除する必要が無いと判断することが出来そうです。

とはいえそれを実現するには、今回述べた「再起動」の判定仕様を設計することが先決ですね。


> Call DeleteSetting(" ", " ", "Project1.exe")
> 終了時の"  "に何を記述すれば分かりませんでした。

DeleteSetting は SaveSetting で書き込まれたエントリーのために使われるものです。
今回は RegWrite メソッドで書き込んでいるのですから、DeleteSetting は無関係です。



DeleteSetting / SaveSetting / GetSetting / GetAllSettings によって
アクセスされるレジストリエントリーは、
 HKEY_CURRENT_USER\Software\VB and VBA Program Settings\
の配下に限定されます。今回の用途には使えません。


今回のケースでは、
 CreateObject("WScript.Shell").RegDelete "HKCU\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION\Project1.exe"
を用いて削除します。


ただし先にも述べたとおり、この手のレジストリ設定は、本来は
そのアプリケーションのインストーラーによって制御されるべきです。

もしくは該当のアプリケーションに対して、設定画面を設けるようにし、
その中でレジストリの編集や削除を実施するようにします。

[ツリー表示へ]
タイトルRe^12: WebBrowserコントロールによるWebページにつきまして
記事No16407
投稿日: 2018/02/15(Thu) 17:37
投稿者susu
魔界の仮面弁士 様

お世話になります。

丁度、自分の投稿時に魔界の仮面弁士 様よりご回答がありましたが、削除することが出来るようになりました
ので、投稿させてもらいます。ご質問につきまして、再度、返答させてもらいます。

下記のwebページを参考に削除することが出来るようになりました。
魔界の仮面弁士 様の、ご回答により削除出来るようになりました。
http://bbs.wankuma.com/index.cgi?mode=al2&namber=56849&KLOG=95

参考
CreateObject("WScript.Shell").RegDelete "HKCU\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION\Project1.exe"

レジストリに関して多少は理解できるようになりました。また、
レンダリングモード機能の指摘して頂き原因が分りました。それにより前に進めることに繋がることになりました。

間違いが無ければWebBrowser コントロールは普段使用しますIEブラウザの部品から作られことも知りました。

お手数をお掛けしております。

[ツリー表示へ]
タイトルRe^13: WebBrowserコントロールによるWebページにつきまして
記事No16408
投稿日: 2018/02/16(Fri) 06:56
投稿者susu
魔界の仮面弁士 様

返答をして頂きまして、ありがとうございました。

>> 終了時には作成した名前("Project1.exe")を削除したいと思っています。

>何故削除したいのでしょうか?
はい、
レジストリ内容の変更をしたくなかったからです。
使う時に追加して終了時に削除しますとレジストリは変更されないと思い安心ができるからです。
それが削除にしたかった理由です。

>FEATURE_BROWSER_EMULATION は、起動時に読み込まれる設定なのですから、
>起動する前には既にレジストリに書き込んだ状態でなければなりません。

Private Sub Form_Load()

   Dim regKey As String
 @レジストリに書き込みます。                      
   regKey = "HKCU\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION\"
     ・
     ・
End Sub

実行ファイルが起動しますとLoadを行ってレジストリに書き込んだ状態になります。
      
FORM1にありますボタンをクリックしてFORM2を開きます。

FORM2にWebBrowser1を設けFORM2のボタンでAアプリ(WebBrowserコントロール)を起動します。

FORM2の終了ボタンでFORM2を閉じてアプリも終了します。

FORM1を閉じたときにレジストリに書き込んだ追加を削除します。

>再起動、ということは、そのアプリは一旦終了してしまうわけですから、
>そこで削除してしまうのは都合が悪いと思うのですが。
不具合の発生が高まるのではないかと感じることができました。

>どうしても動的に生成・削除したいのであれば、レジストリを操作するアプリと
>そこから呼び出されるアプリを別の exe に分けてしまうのはどうでしょう。
はい、安全も考えアプリを別の exe に分ける方法は良いと思いました。
>ただしいずれの方法を使うにしても、アプリ起動中に強制終了した場合に
>レジストリが削除されずに残ってしまうことを許容できるのかどうか、とか、
>Project1.exe が複数起動された場合にどのように振舞うのか、といった点について
>しっかりと検討しておかねばならないでしょう。
はい、アプリ起動中に強制終了がありますと複数起動など考え付かない事が一番心配になります。

>> 既に同名で作成されていた場合は削除しないように考えています。
>起動時に RegRead しておけば、そのエントリが起動前に作成済みかどうかを調べられますね。
>作成済みで無かった場合には、終了時に削除する必要が無いと判断することが出来そうです。

>とはいえそれを実現するには、今回述べた「再起動」の判定仕様を設計することが先決ですね。
はい、「再起動」を考えますと色々な問題に対応しなければならないことを考えさせられました。
「再起動」につきましては、本当に難しいです。

>> Call DeleteSetting(" ", " ", "Project1.exe")
>> 終了時の"  "に何を記述すれば分かりませんでした。
はい、今回、分りました。

>DeleteSetting は SaveSetting で書き込まれたエントリーのために使われるものです。
>今回は RegWrite メソッドで書き込んでいるのですから、DeleteSetting は無関係です。
はい、今回、分りました。

>DeleteSetting / SaveSetting / GetSetting / GetAllSettings によって
>アクセスされるレジストリエントリーは、
> HKEY_CURRENT_USER\Software\VB and VBA Program Settings\
>の配下に限定されます。今回の用途には使えません。
はい、分りました。Call DeleteSetting・・

>今回のケースでは、
> CreateObject("WScript.Shell").RegDelete "HKCU\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION\Project1.exe"
>を用いて削除します。
はい、分りました。ありがとうございした。

>ただし先にも述べたとおり、この手のレジストリ設定は、本来は
>そのアプリケーションのインストーラーによって制御されるべきです。

>もしくは該当のアプリケーションに対して、設定画面を設けるようにし、
>その中でレジストリの編集や削除を実施するようにします。
はい、分りました。一番、安全、安心と感じました。
VB6の実行ファイルにレジストリ設定画面を設けますと@、A、「再起動」、「再起動」
の判定仕様を設計、
>アプリ起動中に強制終了した場合に
>レジストリが削除されずに残ってしまうことを許容できるのかどうか、とか、
>Project1.exe が複数起動された場合にどのように振舞うのか、といった点について
>しっかりと検討しておかねばならないでしょう。
などの必要がなくなります。間違っていなければ、設定画面を設けて、アプリを別の exe に分
けますとインストーラーにる制御になると思われましたので、この方法で行いたいと思います。

>No.16395
>詳細は下記をご覧ください。
 https://msdn.microsoft.com/library/ee330730.aspx#browser_emulation
IEのバージョン応じた値が設定できるようになりました。ありがとうございました。

キー名の日本語は見た事がありませんが、実際にキー名を"Project1.exe"から"テスト.exe"の日本語で
行いましたが問題なく動作しました。日本語にすることで何か問題があるのか疑問に思いました。

レジストリに関しては、色々なご指摘をしてもらうことで慎重に考えなければならない事を学びました。
使用する場合ば、少しでも安全、安心な方法として設定画面を設ける方法に決めました。
本当にありがとうございました。心より感謝申し上げます。

[ツリー表示へ]
タイトルRe^14: WebBrowserコントロールによるWebページにつきまして
記事No16409
投稿日: 2018/02/16(Fri) 12:29
投稿者魔界の仮面弁士
> レジストリ内容の変更をしたくなかったからです。

動的に追加・削除したとしても、変更したことには変わり無いですね。
レジストリからでなければ指定できない設定なので、そこは諦めてもらうことになりそうです。


>> もしくは該当のアプリケーションに対して、設定画面を設けるようにし、
>> その中でレジストリの編集や削除を実施するようにします。
> はい、分りました。一番、安全、安心と感じました。

ちなみに、レジストリアクセスに際して権限昇格が必要な場合など
(特に HKCU ではなく HKLM を使うような場合)においては、
その書き換えボタンにシールドアイコンを付与するのが習わしです。
http://dobon.net/vb/dotnet/system/displayshieldicon.html


> roject1.exe"から"テスト.exe"の日本語で
> 行いましたが問題なく動作しました。日本語にすることで何か問題があるのか疑問に思いました。

基本的には問題ないので、実際に試してみて判断、といったところでしょうか。

レジストリー に限っていえば、Unicode がサポートされていますので、
たとえ日本語以外の OS であったとしてもカタカナを利用できます。

ただ、開発時のプロジェクトやフォルダーに漢字やカタカナを使うのは
個人的には避けることをお奨めしています。
別の場所で問題を生じる可能性がありますので。


【Visual Basic でプロジェクト名に日本語の文字を使用できない】
http://support.microsoft.com/kb/418924/ja
》 Microsoft Visual Basic 5.0、および Visual Basic 6.0 で
》 プロジェクト、コントロール、フォーム モジュールなどの名前に
》 日本語の文字を使用した際に、予期しない動作をすることがあります。
》 Visual Basic では、プロジェクト、コントロール、フォーム モジュール、
》 クラス モジュール、標準モジュール、変数、定数、およびプロシージャの名前に
》 日本語の文字を使用することができません。


【[VB] VB5.EXE が起動できなくなる現象の対処】
https://support.microsoft.com/ja-jp/help/411966
》 例えば、以下のような日本語フォルダに日本語ファイルのプロジェクトを
》 保存した場合、VB5.EXE を再起動できなくなります。
》  C:\1234567890\1234567890\123.Vbp (数字はすべて全角)
》 Visual Basic 6.0 では同じ問題は確認されていません。


【ディストリビューション ウィザードで作成したパッケージを Windows2000 にセットアップする場合 "Path or File Not Found" エラーが発生する】
https://support.microsoft.com/ja-jp/help/416585
》 2 バイト文字を使用したユーザー名でログインし、ディストリビューション ウィザードで
》 作成した setup.exe を実行した場合、プログラム グループを選択した後の
》 ファイル コピーが開始されるタイミングで以下のエラー メッセージが
》 表示されることがあります。Path or File Not Found.
》 ディストリビューション ウィザードは、CAB ファイルを展開するために
》 環境変数 TMP で 指定されているディレクトリを使用しますが、そのパスに
》 2 バイト文字が含まれる場合、TMP を正しく取得することができないため
》 エラー メッセージが表示されます。 Windows 95、Windows 98、Windows Me および
》 Windows NT 4.0 においても、環境変数 TMP が 2 バイト文字列を含むパスに
》 設定されている環境では再現します。

[ツリー表示へ]
タイトルRe^15: WebBrowserコントロールによるWebページにつきまして
記事No16410
投稿日: 2018/02/16(Fri) 15:23
投稿者susu
魔界の仮面弁士 様

お返事を下さりありがとうございました。

>> roject1.exe"から"テスト.exe"の日本語で
>> 行いましたが問題なく動作しました。日本語にすることで何か問題があるのか疑問に思いました。
>基本的には問題ないので、実際に試してみて判断、といったところでしょうか。
はい、
実行ファイル(exe)に関しては、基本的には日本語でも問題は無く実際に試してみて判断と分りました。
疑問ついて教えて頂きましてありがとうございました。

>レジストリー に限っていえば、Unicode がサポートされていますので、
>たとえ日本語以外の OS であったとしてもカタカナを利用できます。
はい、
Unicode がサポートされていることは大変、貴重な参考となりました。

>ただ、開発時のプロジェクトやフォルダーに漢字やカタカナを使うのは
>個人的には避けることをお奨めしています。
>別の場所で問題を生じる可能性がありますので。
はい、分りました。

>【Visual Basic でプロジェクト名に日本語の文字を使用できない】
 http://support.microsoft.com/kb/418924/ja
>【[VB] VB5.EXE が起動できなくなる現象の対処】
 https://support.microsoft.com/ja-jp/help/411966
>【ディストリビューション ウィザードで作成したパッケージを Windows2000 にセットアップする場合 "Path or File Not Found" エラーが発生する】
 https://support.microsoft.com/ja-jp/help/416585

今回は、レンダリングのご指摘からWebBrowserコントロールとIE・Webの違いが分りました。
また、レジストリにつきましても学ぶことができました。

長い間、数々の、たいへん貴重なご指導、ご指摘いただきまして 心より感謝いたします。

[ツリー表示へ]