参考:https://stackoverflow.com/questions/4897655/create-a-shortcut-on-desktop
1.不带COM库引用方法(方法内部引用,不需要在程序手动添加引用)
using System.Text;using System.Linq;using System;using System.Collections.Generic;using System.Runtime.InteropServices;using System.Runtime.InteropServices.ComTypes;static void Main(string[] args){IShellLink link = (IShellLink)new ShellLink();link.SetPath(@"D:\test\gif\GifCam.exe");//目标link.SetArguments(" -run 1");//启动参数link.SetWorkingDirectory(@"D:\test\gif");//起始位置link.SetHotkey((short)((short)Hotkey.Ctrl | (short)Hotkey.Alt | (short)'1'));//快捷键link.SetShowCmd((int)CmdShow.Maximized);//显示窗口方式link.SetDescription("Gif录制");//描述link.SetIconLocation(@"D:\test\gif\GifCam.exe", 0);//设置图标IPersistFile file = (IPersistFile)link;string path = @"D:\test\gif\GifCam.lnk";//快捷方式位置file.Save(path, false);}//https://stackoverflow.com/questions/4897655/create-a-shortcut-on-desktop[ComImport][Guid("00021401-0000-0000-C000-000000000046")]public class ShellLink{}[ComImport][InterfaceType(ComInterfaceType.InterfaceIsIUnknown)][Guid("000214F9-0000-0000-C000-000000000046")]public interface IShellLink{void GetPath([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszFile, int cchMaxPath, out IntPtr pfd, int fFlags);void GetIDList(out IntPtr ppidl);void SetIDList(IntPtr pidl);void GetDescription([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszName, int cchMaxName);void SetDescription([MarshalAs(UnmanagedType.LPWStr)] string pszName);void GetWorkingDirectory([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszDir, int cchMaxPath);void SetWorkingDirectory([MarshalAs(UnmanagedType.LPWStr)] string pszDir);void GetArguments([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszArgs, int cchMaxPath);void SetArguments([MarshalAs(UnmanagedType.LPWStr)] string pszArgs);void GetHotkey(out short pwHotkey);void SetHotkey(short wHotkey);void GetShowCmd(out int piShowCmd);void SetShowCmd(int iShowCmd);void GetIconLocation([Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszIconPath, int cchIconPath, out int piIcon);void SetIconLocation([MarshalAs(UnmanagedType.LPWStr)] string pszIconPath, int iIcon);void SetRelativePath([MarshalAs(UnmanagedType.LPWStr)] string pszPathRel, int dwReserved);void Resolve(IntPtr hwnd, int fFlags);void SetPath([MarshalAs(UnmanagedType.LPWStr)] string pszFile);}/// <summary>/// 键盘映射键/// </summary>/// <remarks>/// <para> 字母和数字参考ASCII字符表 http://ascii.911cha.com/ </para>/// <para> 参考微软文档的Hotkey https://docs.microsoft.com/en-us/windows/win32/api/shobjidl_core/nf-shobjidl_core-ishelllinka-gethotkey </para>/// <para> Hotkey对应的值 http://cn.voidcc.com/question/p-vggohlrw-zm.html </para>/// <para> 小键盘和F1-F12 参考 <see cref="System.Windows.Forms.Keys"/> </para>/// </remarks>[Flags]public enum Hotkey{/*//无效内容,设置进去变成 NumPad4,NumPad8,NumPad6,NumPad2Left = 37,Up = 38,Right = 39,Down = 40,*//*小键盘的值*/NumPad0 = 96,NumPad1 = 97,NumPad2 = 98,NumPad3 = 99,NumPad4 = 100,NumPad5 = 101,NumPad6 = 102,NumPad7 = 103,NumPad8 = 104,NumPad9 = 105,F1 = 112,F2 = 113,F3 = 114,F4 = 115,F5 = 116,F6 = 117,F7 = 118,F8 = 119,F9 = 120,F10 = 121,F11 = 122,F12 = 123,Shift = 256,Ctrl = 512,Alt = 1024,Ext = 2048,}/// <summary>/// 显示方式/// </summary>/// <remarks>/// 参考/// https://docs.microsoft.com/zh-cn/windows/win32/api/shobjidl_core/nf-shobjidl_core-ishelllinka-getshowcmd/// https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-showwindow/// </remarks>public enum CmdShow{/// <summary>/// 激活并显示一个窗口。如果窗口被最小化或最大化,系统会将其恢复到原来的大小和位置。应用程序应在第一次显示窗口时指定此标志。/// </summary>Normal = 1,/// <summary>/// 设置无效,设置为最小化还是常规窗口/// 激活窗口并将其显示为最小化的窗口。/// </summary>Minimized = 2,/// <summary>/// 激活窗口并将其显示为最大化窗口。/// </summary>Maximized = 3,}

2.带COM库
需要添加 COM引用 Windows Script Host Object Model
using IWshRuntimeLibrary;
static void Main(string[] args)
{
IWshShortcut shortcut = (IWshShortcut)new WshShell().CreateShortcut(@"D:\test\gif\GifCam.lnk");//创建快捷方式对象
shortcut.TargetPath = @"D:\test\gif\GifCam.exe";//指定目标路径
shortcut.WorkingDirectory = @"D:\test\gif";//设置起始位置
shortcut.WindowStyle = 1;//设置窗口显示方式,1=常规窗口,2=最小化(无效),3=最大化
shortcut.Description = "Gif录制2";//设置备注
shortcut.Hotkey = "Ctrl+Alt+Left";//设置快捷键
shortcut.IconLocation = @"D:\test\gif\GifCam.exe,0";//设置图标
shortcut.Arguments = " -run 3";//启动参数
shortcut.Save();//保存快捷方式
}
