【C#】WSHを使ってショートカットを作成する

2018年5月11日C#,開発

おはようございます。

少し久しぶりにC#の投稿です。
今回はC#プログラムからWSHを利用して
デスクトップにショートカットファイルを作成してみました。

プログラムは、新規作成となります。

スポンサーリンク

新規プロジェクトの作成

VisualStudio2017 で、新規コンソールプロジェクトを作成します。

VisualStudio2017のインストールやプロジェクトの作成方法は次の記事を参考にしていただければ。

プログラム

program.cs

using System;
using System.IO;
using System.Reflection;

namespace ConsoleApp1
{
    /// <summary>
    /// コンソールプログラム.
    /// </summary>
    class Program
    {

        /// <summary>
        /// メイン処理
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {
            Console.WriteLine("ショートカット作成 開始");

            // 引数にパスが設定されていたらそれを使う
            string target = "";
            foreach (string s in args)
            {
                FileInfo fi = new FileInfo(s);
                if (fi.Exists)
                {
                    target = fi.FullName;
                    // ショートカット作成
                    CreateShrotcutFile(target);
                }
            }

            // 引数が無ければ、とりあえず自身のショートカットでも作ってみる
            if (string.IsNullOrEmpty(target))
            {
                target = Assembly.GetExecutingAssembly().Location;

                // ショートカット作成
                CreateShrotcutFile(target);
            }

            Console.WriteLine("ショートカット作成 終了");
            Console.ReadKey();

        }


        /// <summary>
        /// ショートカットファイルを作成します.
        /// </summary>
        /// <param name="filePath"></param>
        public static void CreateShrotcutFile(string filePath)
        {
            
            Console.WriteLine(new FileInfo(filePath).Name + " のショートカットを作成します。");

            // 出力先(デスクトップ)
            string destDir = Environment.GetFolderPath(System.Environment.SpecialFolder.DesktopDirectory);

            // ショートカットファイル名
            string shortcutFile = Path.GetFileNameWithoutExtension(filePath) + @".lnk";

            // 作成するショートカットのパス
            string shortcutPath = destDir + @"\" + shortcutFile;

            // リフレクションでWSHオブジェクトを作成
            // GUIDは WSH のCLSID
            dynamic shell = Activator.CreateInstance(Type.GetTypeFromCLSID(new Guid("72C24DD5-D70A-438B-8A42-98424B88AFB8")));

            // WSHでショートカットを作成
            var shortcut = shell.CreateShortcut(shortcutPath);

            // ショートカットのリンク先設定
            shortcut.TargetPath = filePath;

            // アイコンのパスを設定
            // ショートカットの元となるファイルから 0番目 のアイコンを指定
            shortcut.IconLocation = filePath + ",0";

            // ショートカットを保存
            shortcut.Save();

            // Shell、COMオブジェクトの解放
            System.Runtime.InteropServices.Marshal.FinalReleaseComObject(shortcut);
            System.Runtime.InteropServices.Marshal.FinalReleaseComObject(shell);

        }

    }
}

CLSIDについて

WSHのCLSIDなんかは、レジストリの
「コンピュータ\HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\」
を参照してください。

レジストリエディタ

起動してみる

とりあえず、デバッグ引数に、「notepad.exe」、「explore.exe」のパスを渡して実行。

コンソール

コンソールに結果が出力され、デスクトップにショートカットが作成されればOKですね。

デスクトップ

まとめ

まあ、ちょっと使い道についてはなんとも言えませんが
こういった方法があるんだということで、勉強になりました。

C#については次回は未定です。

ではでは。

スポンサーリンク


関連するコンテンツ

2018年5月11日C#,開発C#,CSharp,WSH,プログラミング

Posted by doradora