web-dev-qa-db-ja.com

ファイルショートカット(.lnk)の作成

私はC#でファイルへのショートカットを作成する簡単な方法を探していましたが、それを行う外部dllのみを見つけました。実際には非常に驚くべきことです。それを行うための方法が組み込まれていません。

とにかく、lnkファイルは特定のコマンドと指定されたパスを持つ単なるテキストファイルであることを知っています。 (コード内で)テキストファイルを作成して、テキストを正しいコマンドに設定し、拡張子を.lnkに変更できると思いました。最初に手動でそれを試みましたが、失敗しました。

C#で特定のパスへのショートカットを作成するためにそのような何かをする方法(またはおそらく別の簡単な方法)はありますか?

明確にするために、ショートカットとは、ファイルにつながる.lnkファイルを意味します編集:そして、ファイルとは、自分のショートカットだけでなく、任意のファイルを意味しますアプリケーション


すべてのシナリオでうまく機能しない場合は編集します。

これらの参照を追加します。

  1. Microsoft Shellコントロールと自動化
  2. Windowsスクリプトホストオブジェクトモデル

この名前空間を追加します。

using Shell32;
using IWshRuntimeLibrary;

次に動作しているように見えます:

var wsh = new IWshShell_Class();
IWshRuntimeLibrary.IWshShortcut shortcut = wsh.CreateShortcut(
    Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\shorcut2.lnk") as IWshRuntimeLibrary.IWshShortcut;
shortcut.TargetPath = @"C:\Users\Zimin\Desktop\test folder";            
shortcut.Save();

他の人にも役立つことを願っています。ご清聴ありがとうございました。

また、ISファイルを作成し、適切なコマンドを記述してからlnkファイルに変更する方法がある場合は、お知らせください。

19
user2599803

これを行う1つの方法は、Joeproによって ここでの答え で指摘されています。

Windows Scripting HostにCOM参照を追加する必要があります。私が知る限り、これを行うためのネイティブな.netの方法はありません。

WshShellClass wsh = new WshShellClass();
IWshRuntimeLibrary.IWshShortcut shortcut = wsh.CreateShortcut(
    Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\shorcut.lnk") as IWshRuntimeLibrary.IWshShortcut;
shortcut.Arguments = "";
shortcut.TargetPath = "c:\\app\\myftp.exe";
// not sure about what this is for
shortcut.WindowStyle = 1; 
shortcut.Description = "my shortcut description";
shortcut.WorkingDirectory = "c:\\app";
shortcut.IconLocation = "specify icon location";
shortcut.Save();

.Net 4.0以降では、最初の行を次の行に置き換えます。

 WshShell wsh = new WshShell();

EDIT:このリンクも役立ちます

15
Danilo Breda