プログラムを起動するための「ショートカット」は皆さんご存知かと思います。
今回は、この「ショートカット」をプログラムで作成してみます。
C#でショートカットを作成するには、おもに2種類の方法があります。
- Windows Script Hostで作る
- リフレクションで作る
どちらも、似たようなコードになりますが、ショートカットが1つできるだけ・・・の割にプログラムのコードではいろいろ書けます。
ショートカットに設定される情報は、
必ず必要な情報
- 作成するショートカットのファイル名
- 起動するプログラムなどのパス
必要であれば設定する情報
- アイコン
- 作業フォルダ
- 起動するプログラムの追加の引数
- ショートカットキー
- コメント
これらは、下記の図のようなプロパティで設定されます。
WSHでショートカットを作る
WSHでショートカットを作るには、Windows Script Host Object Modelを参照設定に追加します。
参照の追加では”COM”タブにあります。
コードは下記のようになります。設定項目はちょっと多めにしています。
static void Main(string[] args) { // ショートカットそのもののパス string shortcutPath = System.IO.Path.Combine(Environment.GetFolderPath(System.Environment.SpecialFolder.DesktopDirectory), @"MyApp.lnk"); // ショートカットのリンク先(起動するプログラムのパス) string targetPath = Application.ExecutablePath; // WshShellを作成 IWshRuntimeLibrary.WshShell shell = new IWshRuntimeLibrary.WshShell(); // ショートカットのパスを指定して、WshShortcutを作成 IWshRuntimeLibrary.IWshShortcut shortcut = (IWshRuntimeLibrary.IWshShortcut)shell.CreateShortcut(shortcutPath); // ①リンク先 shortcut.TargetPath = targetPath; // ②引数 shortcut.Arguments = "/a /b /c"; // ③作業フォルダ shortcut.WorkingDirectory = Application.StartupPath; // ④実行時の大きさ 1が通常、3が最大化、7が最小化 shortcut.WindowStyle = 1; // ⑤コメント shortcut.Description = "テストのアプリケーション"; // ⑥アイコンのパス 自分のEXEファイルのインデックス0のアイコン shortcut.IconLocation = Application.ExecutablePath + ",0"; // ショートカットを作成 shortcut.Save(); // 後始末 System.Runtime.InteropServices.Marshal.FinalReleaseComObject(shortcut); System.Runtime.InteropServices.Marshal.FinalReleaseComObject(shell); }
リフレクションでショートカットを作る
リフレクションでWindows Script Host Object Modelを参照設定に追加せず、動的にWshShellを作成してショートカットを作成できます。
static void Main(string[] args) { // ショートカットそのもののパス string shortcutPath = System.IO.Path.Combine(Environment.GetFolderPath(System.Environment.SpecialFolder.DesktopDirectory), @"MyApp.lnk"); // ショートカットのリンク先(起動するプログラムのパス) //string targetPath = Application.ExecutablePath; string targetPath = Application.StartupPath; // WshShellを作成 Type t = Type.GetTypeFromCLSID(new Guid("72C24DD5-D70A-438B-8A42-98424B88AFB8")); dynamic shell = Activator.CreateInstance(t); //WshShortcutを作成 var shortcut = shell.CreateShortcut(shortcutPath); //リンク先 shortcut.TargetPath = targetPath; //アイコンのパス shortcut.IconLocation = Application.ExecutablePath + ",0"; // 引数 //shortcut.Arguments = "/a /b /c"; // 作業フォルダ shortcut.WorkingDirectory = Application.StartupPath; // 実行時の大きさ 1が通常、3が最大化、7が最小化 shortcut.WindowStyle = 1; // コメント shortcut.Description = "テストのアプリケーション"; //ショートカットを作成 shortcut.Save(); //後始末 System.Runtime.InteropServices.Marshal.FinalReleaseComObject(shortcut); System.Runtime.InteropServices.Marshal.FinalReleaseComObject(shell); }
今回は、デスクトップにショートカットを作成してみましたが、当然ほかのフォルダでも生成させることはできます。