tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルVB2005でお気に入りダイアログ関係
記事No4961
投稿日: 2007/02/08(Thu) 20:41
投稿者ぼっくり
お世話になっております。

VB6の時に、webbrowserコントロールを追加し、そのDocumentに下記をwriteすると「お気に入りに整理」ダイアログが出ました。
-----------------------------------------------------
<HTML>
<HEAD></HEAD>
<BODY>
<SCRIPT language=VBScript>
window.external.ShowBrowserUI"OrganizeFavorites",null
</SCRIPT>
</BODY>
</HTML>
-----------------------------------------------------

しかし、2005で同じようにすると下記のエラーが出てしまいます。
-----------------------------------------------------
ランタイム エラーが発生しました。
デバッグしますか?

行:4
エラー: オブジェクトがありません。: 'window.external'
-----------------------------------------------------

お気に入りの「追加」「整理」ダイアログを装備したいのですが八方塞でございます。

どうかご教授の程お願いいたします。

[ツリー表示へ]
タイトルRe: VB2005でお気に入りダイアログ関係
記事No4967
投稿日: 2007/02/11(Sun) 08:59
投稿者花ちゃん
> VB6の時に、webbrowserコントロールを追加し、そのDocumentに下記を
>writeすると「お気に入りに整理」ダイアログが出ました。
> しかし、2005で同じようにすると下記のエラーが出てしまいます。

回答ではありません、どなたからも回答がないようなので。

私も最近気がついて、まだ調べてはいないのですが(原因が見つかっていない)
直接、VB2005 とは関係がないようです。
今現在、そのOSでVB6.0のコードを動かしても同じエラーがでるはずです。
 http://hanatyan.sakura.ne.jp/samplepic/vb6_294.htm

多分、WindowsXPのSP2 辺りでのセキュリティの強化によるものではないでしょうか?

調べられるのなら、その辺から攻めないと見つからないし、従って、VB2005 で
調べるより、VB6.0 を含めたスクリプト辺りで調べてみたらどうでしょうか?
(今なら、どこかに記事が掲載されているかも知れません、当時は見当たらなかった)

[ツリー表示へ]
タイトルRe^2: VB2005でお気に入りダイアログ関係
記事No4968
投稿日: 2007/02/11(Sun) 16:17
投稿者スクリプトプログラマ
> > VB6の時に、webbrowserコントロールを追加し、そのDocumentに下記を
> >writeすると「お気に入りに整理」ダイアログが出ました。
> > しかし、2005で同じようにすると下記のエラーが出てしまいます。
>
> 回答ではありません、どなたからも回答がないようなので。

VB6とVB2005の話なら分らないので、コメントしなかったのですが、

>
> 私も最近気がついて、まだ調べてはいないのですが(原因が見つかっていない)
> 直接、VB2005 とは関係がないようです。

ということなら、

> 今現在、そのOSでVB6.0のコードを動かしても同じエラーがでるはずです。
>  http://hanatyan.sakura.ne.jp/samplepic/vb6_294.htm
>
> 多分、WindowsXPのSP2 辺りでのセキュリティの強化によるものではないでしょうか?

ImportExportFavoritesやAddFavoriteなども駄目です。

お気に入りの整理は、HTAから、
showModalDialog("res://shdoclc.dll/orgfav.dlg");
すると、OKでした。

[ツリー表示へ]
タイトルRe^3: VB2005でお気に入りダイアログ関係
記事No4970
投稿日: 2007/02/12(Mon) 00:04
投稿者ぼっくり
> 花ちゃんさん
> スクリプトプログラマさん
ご返答ありがとうございます。

同環境下で以前作成したVB6バージョンでは動作しました・・。(XPProSP2です)
VB6のWebBrowserだとOKでVB2005標準のWebBrowerだとNGみたいです。

やはりFrameWorks環境下でセキュリティなどが加わった可能性大ですね(--;

出来る限りCOMコンポーネントは使いたくないので・・今回は実装を見送ろうと思います・・。
(Marshal.ReleaseComObjectとかがネックで。。(´Д⊂)

色々とありがとうございました!!

[ツリー表示へ]
タイトルRe^4: VB2005でお気に入りダイアログ関係
記事No4971
投稿日: 2007/02/12(Mon) 00:28
投稿者スクリプトプログラマ
> 同環境下で以前作成したVB6バージョンでは動作しました・・。(XPProSP2です)
> VB6のWebBrowserだとOKでVB2005標準のWebBrowerだとNGみたいです。

確かに、単に、以下のVBSで動きますね。

Set ShellUIHelper = WScript.CreateObject("Shell.UIHelper")
ShellUIHelper.ShowBrowserUI "OrganizeFavorites",0

> やはりFrameWorks環境下でセキュリティなどが加わった可能性大ですね(--;
>
> 出来る限りCOMコンポーネントは使いたくないので・・今回は実装を見送ろうと思います・・。
> (Marshal.ReleaseComObjectとかがネックで。。(´Д⊂)

確かに、Excelなどは大変ですが、このケースに限れば簡単なのでは?
よく知りませんが。。。

[ツリー表示へ]
タイトルRe^4: VB2005でお気に入りダイアログ関係
記事No4972
投稿日: 2007/02/12(Mon) 03:08
投稿者YAS
VB2005のWebBrowserコントロールではwindow.externalは空っぽです。
次のように自前でObjectForScriptingプロパティにオブジェクトを設定しなければなりません。
ただ,これではCOMオブジェクトを参照してしまいますし,そもそもスクリプトで実装する意味がありません。

Imports System.Runtime.InteropServices

Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.WebBrowser1.ObjectForScripting = New ExternalObject
        Me.WebBrowser1.DocumentText = "<HTML>" & _
                                      "<HEAD></HEAD>" & _
                                      "<BODY>" & _
                                      "<SCRIPT language=VBScript>" & _
                                      "window.external.ShowBrowserUI ""OrganizeFavorites"", null" & _
                                      "</SCRIPT>" & _
                                      "</BODY>" & _
                                      "</HTML>"
    End Sub

End Class

<ComVisible(True)> _
Public Class ExternalObject

    Public Sub ShowBrowserUI(ByVal sUI As String, ByVal null As Object)
        Dim ShellUIHelper As Object = CreateObject("Shell.UIHelper")
        Try
            ShellUIHelper.ShowBrowserUI(sUI, 0)
        Finally
            If ShellUIHelper IsNot Nothing AndAlso Marshal.IsComObject(ShellUIHelper) Then
                Marshal.ReleaseComObject(ShellUIHelper)
            End If
        End Try
    End Sub

End Class

[ツリー表示へ]