none
URLショートカットの作成でアイコン変更時"オブジェクトでサポートされていないプロパティまたはメソッドです"とエラー表示される。 RRS feed

  • 質問

  • 下記の通り記述したところ、オブジェクトでサポートされていないプロパティまたはメソッドですとエラーになってしまいます。

    objShortCut.IconLocationの行を削除するとアイコン以外は問題なく作成できます。

    アイコンの変更も可能にするにはどのように記述したら良いのでしょうか。

    Set objShell = WScript.CreateObject("WScript.Shell")
    strDesktop = objShell.SpecialFolders("Desktop")
    strFileName = strDesktop + "\hogehoge.url"
    url = InputBox("URLを入力してください。",, "https://hogehoge.com/")
    Set objShortCut = objShell.CreateShortcut(strFileName)
    objShortCut.TargetPath = url
    objShortCut.IconLocation = "%SystemDrive%\hoge\hoge_icon.ico"
    objShortCut.Save
    WScript.Echo strFileName & "にショートカットを作成しました。"

    2013年5月14日 0:52

回答

  • それぞれ CreateShortcut で得られたオブジェクトの TypeName 関数で確認すると分かりますが、
    ".lnk" の場合は WshShortcut のオブジェクトなのに対し、".url" の方は WshUrlShortcut のオブジェクトが作成されるようです。
    WshUrlShortcut には IconLocation プロパティはありませんので、件のエラーが発生するのは仕方がないと思います。

    WshShellオブジェクトを利用する(3) - @IT
    http://www.atmarkit.co.jp/fwin2k/tutor/cformwsh14/cformwsh14_02.html

    インターネット ショートカット ファイルは実はただのテキスト ファイルですので、
    一旦 WshUrlShortcut を Save してからテキストとしてオープンし、"IconFile=" とか "IconIndex=" といったエントリーを追記すればいいと思います。

    2013年5月14日 4:44

すべての返信

  • インデックスが足りないということでしょうか。

    試しにインデックス0でやってみましたが、同じ結果でした。

    他のサイトで見つけた下記コードで試してみたところ、アイコン変更出来ましたが、最初のものと何が違うのか。。。さっぱりです。

    Option Explicit
    On Error Resume Next

    Dim objWshShell     ' WshShell オブジェクト
    Dim strDesktopPath  ' デスクトップのフォルダ名
    Dim strWindowsPath  ' ウィンドウズのフォルダ名
    Dim objShortcut     ' ショートカット情報

    Set objWshShell = WScript.CreateObject("WScript.Shell")
    If Err.Number = 0 Then
        strDesktopPath = objWshShell.SpecialFolders("Desktop")
        strWindowsPath = objWshShell.ExpandEnvironmentStrings("%WINDIR%")
        Set objShortcut = objWshShell.CreateShortcut(strDesktopPath & "\notepad.lnk")
        objShortcut.Description = "テストショートカット"
        objShortcut.HotKey = "CTRL+ALT+N"
        objShortcut.IconLocation = "%SystemDrive%hoge\hoge.ico, 0"
        objShortcut.TargetPath = strWindowsPath & "\notepad.exe"
        objShortcut.WorkingDirectory = strWindowsPath
        objShortcut.Save

        If Err.Number = 0 Then
            WScript.Echo "ショートカットを作成しました。"
        Else
            WScript.Echo "エラー: " & Err.Description
        End If
    Else
        WScript.Echo "エラー: " & Err.Description
    End If

    Set objShortcut = Nothing
    Set objWshShell = Nothing

    2013年5月14日 2:00
  • 見当違いの回答をしてすみません。

    strFileName = strDesktop + "\hogehoge.url"

     Set objShortcut = objWshShell.CreateShortcut(strDesktopPath & "\notepad.lnk")

    拡張子によって IconLocation プロパティの有無が代わるのかも知れません。

    2013年5月14日 3:16
  • それぞれ CreateShortcut で得られたオブジェクトの TypeName 関数で確認すると分かりますが、
    ".lnk" の場合は WshShortcut のオブジェクトなのに対し、".url" の方は WshUrlShortcut のオブジェクトが作成されるようです。
    WshUrlShortcut には IconLocation プロパティはありませんので、件のエラーが発生するのは仕方がないと思います。

    WshShellオブジェクトを利用する(3) - @IT
    http://www.atmarkit.co.jp/fwin2k/tutor/cformwsh14/cformwsh14_02.html

    インターネット ショートカット ファイルは実はただのテキスト ファイルですので、
    一旦 WshUrlShortcut を Save してからテキストとしてオープンし、"IconFile=" とか "IconIndex=" といったエントリーを追記すればいいと思います。

    2013年5月14日 4:44
  • lnkとurlで使用できるプロパティに違いがあったのですね。

    おかげで思い通りのショートカットが作成出来ました。

    'URLショートカットを作成
    Set WshShell = CreateObject("WScript.Shell")
    strDesktop = WshShell.SpecialFolders("Desktop")
    strPath = strDesktop + "\hogehoge.url"
    TargetURL = InputBox("URLを入力してください。",, "https://hogehoge.com/")

    Set WshUrlShortcut = WshShell.CreateShortcut(strPath)
    WshUrlShortcut.TargetPath = TargetURL
    WshUrlShortcut.Save()

    '作成したURLショートカットをテキストとして開く
    Set objFso = CreateObject("Scripting.FileSystemObject")
    Set objNewShortcut = objFso.OpenTextFile(strPath,8)

    'アイコンの指定。
    objNewShortcut.WriteLine("IconIndex=0")
    objNewShortcut.WriteLine("IconFile=%SystemDrive%\hoge\hogehoge.ico")
    objNewShortcut.Close()

    WScript.Echo strPath & "にショートカットを作成しました。"


    2013年5月14日 7:16