今回はC#プログラムからWSHを利用して
デスクトップにショートカットファイルを作成してみました。
プログラムは、新規作成となります。
VisualStudio2017 で、新規コンソールプロジェクトを作成します。
VisualStudio2017のインストールやプロジェクトの作成方法は次の記事を参考にしていただければ。
Visual Studio 2017 Community のインストールから Hello World
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);
}
}
}
WSHのCLSIDなんかは、レジストリの
「コンピュータ\HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\」
を参照してください。
とりあえず、デバッグ引数に、「notepad.exe」、「explore.exe」のパスを渡して実行。
コンソールに結果が出力され、デスクトップにショートカットが作成されればOKですね。
まあ、ちょっと使い道についてはなんとも言えませんが
こういった方法があるんだということで、勉強になりました。
C#については次回は未定です。
ではでは。
Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。
また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!
こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?
コメント