参考: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,NumPad2
Left = 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();//保存快捷方式
}