Lesson10 ショートカットの作成
WshShellのオブジェクト1 -WshShortcutオブジェクト・WshUrlShortcutオブジェクト-
今回はWshShellのオブジェクトである、WshShortcutオブジェクトおよびWshUrlShortcutオブジェクトを用いて、ショートカットを自在に作成する話をしたいと思います。ここはそんなに難しい話ではないので、さらっと流したいと思います。
WshShortcutオブジェクト、もしくはWshUrlShortcutオブジェクトを作成するには、以下のようにWshShellのCreateShortcutメソッドを使います。
Set WSHShell = Wscript.CreateObject("Wscript.Shell") Set objSc = WSHShell.CreateShortcut("C:\shortcut.lnk")
この例では、objScというオブジェクト変数にWshShortcutオブジェクトが代入されています。CreateShortcutメソッドには、ショートカットの名前を引数として指定します。このとき、拡張子が".lnk"ならばobjScにはWshShortcutオブジェクトが、".url"ならばWshUrlShortcutオブジェクトが返されます。それ以外の拡張子のファイル名を指定すると、実行時エラーが発生します。
なお、引数として指定するファイル名は、存在しないファイル名でも構いません。存在しないファイル名を指定して新しいショートカットを作成することも、既存のショートカットファイルを指定して、内容を変更することも可能です。
こうやって作成したWshShortcutオブジェクトの内容を決める各プロパティを設定し、そのあとSaveメソッドを実行するとショートカットが実際に作成されます。(もしすでに存在するファイル名を指定していた場合は上書きされます)
では、実際にショートカットを作成するスクリプトを見ていきましょう。また手抜きですが、「オブジェクト解説」にある例そのままです。このスクリプトはデスクトップにエクスプローラのショートカットを作成します。
Set WSHShell = WScript.CreateObject("WScript.Shell") 'デスクトップにエクスプローラのショートカットを作成する。 Set objSc = WSHShell.CreateShortcut("C:\WINDOWS\デスクトップ\エクスプローラ.lnk") With objSc 'objScの各プロパティを設定。WithステートメントはVBS5.0以上で使用可。 .TargetPath="C:\Windows\explorer.exe" 'リンク先のパス。 .Arguments="/n,/root,C:\" 'コマンドラインオプション。C:\をルートにしてマイコンピュータ形式で表示 .HotKey="Ctrl+Alt+A" 'ホットキー .WindowStyle=3 '最大化表示 .WorkingDirectory="C:\Windows" '作業フォルダ .IconLocation="C:\Windows\System\Shell32.dll,45" 'アイコン .Save '変更点を保存。 End With
この例では、Withステートメントを使って、objScの各プロパティを一気に設定しています。Withステートメントを使うと、一つのオブジェクトに対するプロパティやメソッドをオブジェクト名を指定せずに記述することができます。上の例では、With
とEnd Withの間で、.の前のobjScを省略することができます。
Withステートメントは次のような使い方もできます。
With Wscript MsgBox .Name & vbCrLf & "バージョン=" & .Version & vbCrLf & "パス=" & .Fullname End With
ただし、Withステートメントを利用するには、VBS5.0以上が必要です(最新版のWSHをインストールしてあれば大丈夫です)。VBS5.0未満でこのスクリプトを実行させようとしてもエラーが発生してしまいます。このようにVBSは言語機能が拡張されることもあるので油断できません。
ちなみにVBS自体のバージョンは、ScriptEngineMajorVersion関数、ScriptEngineMinorVersion関数、ScriptEngineBuildVersion関数を使えばわかります。
objScの各プロパティについては、上の実例を見ていただければだいたいおわかりのことと思います。デスクトップに作成されたショートカットのプロパティを見て、どのプロパティがどの項目と対応しているか、確認してみてください。
最後にSaveメソッドを呼び出して、各プロパティの設定を反映して、実際にショートカットを作成しています。
これだけではあれなんで、応用例をどうぞ。これは、実行したスクリプト自身のショートカットをスタートメニューに登録しちゃう、迷惑な?スクリプトです。
Set WSHShell = WScript.CreateObject("WScript.Shell") Set objSc = WSHShell.CreateShortcut("C:\WINDOWS\スタート メニュー\プログラム\" & Wscript.ScriptName & ".lnk") objSc.TargetPath=Wscript.ScriptFullName objSc.Save
このように、WshShortcutオブジェクトで最低限必要なプロパティはTargetPathプロパティ(リンク先)だけで、あとのプロパティを省略すると、それぞれデフォルトのプロパティが割り当てられます。
ところで、CreateShortcutメソッドの引数には、存在しないファイル名は指定できますが、存在しないフォルダにあるファイル名を指定すると、Saveメソッド実行時にエラーになってしまうのでご注意ください。
余談:TargetPathが間違っている場合、Resolveメソッドを使えば正しく修正される…はずなんですが、Resolveメソッドを実行しようとするとそのメソッドはない、というエラーになりますね。仕様書には書いてあるんですが…。
なお、WshShortcutオブジェクトの詳細は、ここに書いてありますのであわせてご覧ください。
次にWshUrlShortcutオブジェクトを見ていきましょう。
Set WSHShell = WScript.CreateObject("WScript.Shell") Set objSc = WSHShell.CreateShortcut("C:\WINDOWS\Favorites\Windows Scripting Host Laboratory.url") objSc.TargetPath="http://www.roy.hi-ho.ne.jp/mutaguchi/wsh/" objSc.Save
これは、某サイト(笑)へのインターネットショートカットを「お気に入り」に登録してしまうという大それた?スクリプトです。urlファイルは、URLと最終表示日時などが記述されたテキストファイルです。このように拡張子がurlのファイル名をCreateShortcutメソッドの引数に指定すると、WshShortcutオブジェクトではなく、WshUrlShortcutオブジェクトが返されます。WshUrlShortcutオブジェクトは、WshShortcutオブジェクトに比べてプロパティが少ないことに注意してください。
TargetPathにはローカルのファイルやフォルダも指定できます。たとえば、TargetPath="C:\Windows"のように指定すると、自動的にTargetPath="file:///c:/windows/"のようにURLに変換されます。もちろんTargetPath="mailto:mutaguchi@roy.hi-ho.ne.jp"のようにメールアドレスを指定することも可能です。
なお、WshUrlShortcutオブジェクトの詳細は、ここに書いてありますのであわせてご覧ください。
今回はWshShellのオブジェクトであるWshShortcutオブジェクト、そしてWshUrlShortcutオブジェクトをとりあげ、WSHからショートカットを作成する手順について解説しました。
次回も、WshShellのオブジェクトであるWshEnvironmentオブジェクト、WshSpecialFoldersオブジェクトを取り上げます。