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

質問
-
下記の通り記述したところ、オブジェクトでサポートされていないプロパティまたはメソッドですとエラーになってしまいます。
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 & "にショートカットを作成しました。"
回答
-
それぞれ 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日 7:12
すべての返信
-
http://msdn.microsoft.com/ja-jp/library/cc364482.aspx
よく確認してみてください。
-
インデックスが足りないということでしょうか。
試しにインデックス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 -
それぞれ 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日 7:12
-
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