この連載では、Windows Script Host(以降、WSH)環境で利用できるさまざまな機能を利用しながら、日常の業務や生活に役立つスクリプトを紹介しています。登場するオブジェクトやその構文を理解していただきたいのはもちろんですが、実際にスクリプトを実行する中で、スクリプトの便利さや、実際にプログラミングすることの面白みを少しでも感じて頂ければと思っています。

ゼロからはじめるWindows Script Host - 基本編
ゼロからはじめるWindows Script Host - テキスト読み書き編
ゼロからはじめるWindows Script Host - Excel連携編
ゼロからはじめるWindows Script Host - ファイルシステム編

さて、本連載も5回目となる今回は、ショートカット編と題して、あらかじめ用意されたリストに基づいて、必要なショートカットをデスクトップに自動作成するサンプルを紹介します。ショートカットの情報はテキストファイルとして管理できますので、(たとえば)会社の中で複数のコンピュータに対して同じデスクトップ環境を用意したい、というような場合に使えるでしょう。

また、個人でも現在のデスクトップに置かれたショートカットをまとめておくことで、新たにパソコンを購入した場合にも即座にもともとあったショートカットを再現することができます。サンプルコードを通じて、スクリプトからショートカットを操作する方法、また、特定フォルダのパスを取得する方法について理解してみましょう。

デスクトップ上に決められたショートカットを自動生成

データファイルの内容を確認する

まずは、本稿で使用するデータファイル(ショートカット情報)を確認しておきましょう。データファイルは、タブ区切りファイルで記述しているものとします。

shortcut.dat

秀丸  C:\Program Files\Hidemaru\Hidemaru.exe  Ctrl+Alt+H  テキストエディタ
FFFTP   C:\Program Files\ffftp\FFFTP.exe    Ctrl+Alt+F  FTPソフト
作業表 Z:\仕事\todo.xlsx Ctrl+Alt+S  ToDo管理
Capture Light   C:\Program Files\capture\Capt_St.exe    Ctrl+Alt+T  キャプチャ
Eclipse C:\eclipse\eclipse.exe  Ctrl+Alt+E  統合開発環境

項目は、先頭から「ショートカットの名前」「リンク先」「ホットキー」「コメント」を表します。ホットキーは、(たとえば)Ctrl+Alt+Hとした場合には、[Ctrl]キー+[Alt]キー+[H]キーを同時に押すことで対応するショートカットを選択することができます。コメントは、ショートカットにマウスポインタを置いた時にツールヒントとして表示されるショートカットの説明です。

コメントを設定した場合の表示例 マウスポインタをショートカットに置いた時に、ツールヒントが表示される。

スクリプト全体を概観する

それではさっそく、具体的なコードを見ていくことにします。ちょっと複雑なコードに思えるかもしれませんが、順を追って説明していきますので、まずはリストの中のコメントを手がかりに、どんな作業を行っているのか、全体像を把握してみてください。

[リスト01]shortcut.vbs

    ' ショートカット情報を保存したテキストファイルのパス
Const DATA = "C:\tmp\shortcut.dat"

    ' WshShell/FileSystemObjectオブジェクトを生成(1)
Set shell = WScript.CreateObject("WScript.Shell")
Set fs = WScript.CreateObject("Scripting.FileSystemObject")
    ' テキストファイルを読み取り専用でオープン(存在しない場合はエラー)
Set stream = fs.OpenTextFile(DATA, 1, False)
    ' 先頭行から順番にテキストを読み込み
Do While Not stream.AtEndOfStream
    ' 読み込んだ行をタブで分割し、配列lineに格納
  line = Split(stream.ReadLine(), Chr(9))
    ' ショートカットのパスを生成(2)
  path = fs.BuildPath(shell.SpecialFolders("Desktop"), line(0) & ".lnk")
    ' ショートカットを新規に作成(3)
  Set link = shell.CreateShortcut(path)
    ' ショートカットを設定&保存(4)(5)
  With link
    .TargetPath = line(1)   ' リンク先
    .Hotkey = line(2)   ' ホットキー
    .Description = line(3)  ' コメント
    .WindowStyle = 3    ' ウィンドウの状態
    .Save() ' 保存
  End With
Loop
    ' テキストファイルをクローズ
stream.Close()

「テキスト読み書き編」でも紹介したように、テキストファイルを読み書きするにはTextStreamオブジェクトを利用するのでした。復習になりますが、ReadLineメソッドでテキストファイルの先頭から末尾に到達するまで一行ずつ読み込み、読み込んだテキストをタブで分割していく様子を、図でも確認しておきましょう。