c# 纯代码方式创建快捷方式
c# 纯代码方式创建快捷方式using System;using System.Collections.Generic;using System.Text;using Microsoft.Win32;using System.Runtime.InteropServices;namespace ShortcutNamespace{ class MyShortcut { [StructLayout(LayoutKind.Sequential)] public struct FILETIME { uint dwLowDateTime; uint dwHighDateTime; } [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] public struct WIN32_FIND_DATA { public const int MAX_PATH = 260; uint dwFileAttributes; FILETIME ftCreationTime; FILETIME ftLastaccessTime; FILETIME ftLastWriteTime; uint nFileSizeHight; uint nFileSizeLow; uint dwOID; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = MAX_PATH)] string cFileName; } [ComImport] [Guid("0000010c-0000-0000-c000-000000000046")] [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] public interface ipersist { [PReserveSig] void GetClassID(out Guid pClassID); } [ComImport] [Guid("0000010b-0000-0000-C000-000000000046")] [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] public interface IPersistFile : IPersist { new void GetClassID(out Guid pClassID); [PreserveSig] int IsDirty(); [PreserveSig] void Load( [MarshalAs(UnmanagedType.LPWStr)] string pszFileName, uint dwMode); [PreserveSig] void Save( [MarshalAs(UnmanagedType.LPWStr)] string pszFileName, [MarshalAs(UnmanagedType.Bool)] bool fRemember); [PreserveSig] void SaveCompleted([MarshalAs(UnmanagedType.LPWStr)] string pszFileName); [PreserveSig] void GetCurFile([MarshalAs(UnmanagedType.LPWStr)] string ppszFileName); } [ComImport] [Guid("000214F9-0000-0000-C000-000000000046")] [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] public interface IShellLink { [PreserveSig] void GetPath( [MarshalAs(UnmanagedType.LPWStr, SizeParamIndex = 1)] out string pszFile, int cch, ref WIN32_FIND_DATA pfd, uint fFlags); [PreserveSig] void GetIDList(out IntPtr ppidl); [PreserveSig] void SetIDList(IntPtr ppidl); [PreserveSig] void GetDescription( [MarshalAs(UnmanagedType.LPWStr, SizeParamIndex = 1)] out string pszName, int cch); [PreserveSig] void SetDescription( [MarshalAs(UnmanagedType.LPWStr)] string pszName); [PreserveSig] void GetWorkingDirectory( [MarshalAs(UnmanagedType.LPWStr, SizeParamIndex = 1)] out string pszDir, int cch); [PreserveSig] void SetWorkingDirectory( [MarshalAs(UnmanagedType.LPWStr)] string pszDir); [PreserveSig] void GetArguments( [MarshalAs(UnmanagedType.LPWStr, SizeParamIndex = 1)] out string pszArgs, int cch); [PreserveSig] void SetArguments( [MarshalAs(UnmanagedType.LPWStr)] string pszArgs); [PreserveSig] void GetHotkey(out ushort pwHotkey); [PreserveSig] void SetHotkey(ushort wHotkey); [PreserveSig] void GetShowCmd(out int piShowCmd); [PreserveSig] void SetShowCmd(int iShowCmd); [PreserveSig] void GetIconLocation( [MarshalAs(UnmanagedType.LPWStr, SizeParamIndex = 1)] out string pszIconPath, int cch, out int piIcon); [PreserveSig] void SetIconLocation( [MarshalAs(UnmanagedType.LPWStr)] string pszIconPath, int iIcon); [PreserveSig] void SetRelativePath( [MarshalAs(UnmanagedType.LPWStr)] string pszPathRel, uint dwReserved); [PreserveSig] void Resolve( IntPtr hwnd, uint fFlags); [PreserveSig] void SetPath( [MarshalAs(UnmanagedType.LPWStr)] string pszFile); } [GuidAttribute("00021401-0000-0000-C000-000000000046")] [ClassInterfaceAttribute(ClassInterfaceType.None)] [ComImportAttribute()] public class CShellLink { } public const int SW_SHOWNORMAL = 1; /// <summary> /// 创建快捷方式。 /// </summary> /// <param name="shortcutPath">快捷方式路径。</param> /// <param name="targetPath">目标路径。</param> /// <param name="workingDirectory">工作路径。</param> /// <param name="description">快捷键描述。</param> public static bool CreateShortcut(string shortcutPath, string targetPath, string workingDirectory, string description, string iconLocation = null) { try { CShellLink cShellLink = new CShellLink(); IShellLink iShellLink = (IShellLink)cShellLink; iShellLink.SetDescription(description); iShellLink.SetShowCmd(SW_SHOWNORMAL); iShellLink.SetPath(targetPath); iShellLink.SetWorkingDirectory(workingDirectory); if (!string.IsNullOrEmpty(iconLocation)) { iShellLink.SetIconLocation(iconLocation, 0); } IPersistFile iPersistFile = (IPersistFile)iShellLink; iPersistFile.Save(shortcutPath, false); Marshal.ReleaseComObject(iPersistFile); iPersistFile = null; Marshal.ReleaseComObject(iShellLink); iShellLink = null; Marshal.ReleaseComObject(cShellLink); cShellLink = null; return true; } catch //(System.Exception ex) { return false; } } /// <summary> /// 创建快捷方式。 /// </summary> /// <param name="shortcutPath">快捷方式路径。</param> /// <param name="targetPath">目标路径。</param> /// <param name="parameter"></param> /// <param name="workingDirectory">工作路径。</param> /// <param name="description">快捷键描述。</param> public static bool CreateShortcut(string shortcutPath, string targetPath, string parameter, string workingDirectory, string description, string iconLocation = null) { try { CShellLink cShellLink = new CShellLink(); IShellLink iShellLink = (IShellLink)cShellLink; iShellLink.SetDescription(description); iShellLink.SetShowCmd(SW_SHOWNORMAL); iShellLink.SetPath(targetPath); iShellLink.SetArguments(parameter); iShellLink.SetWorkingDirectory(workingDirectory); if (!string.IsNullOrEmpty(iconLocation)) { iShellLink.SetIconLocation(iconLocation, 0); } IPersistFile iPersistFile = (IPersistFile)iShellLink; iPersistFile.Save(shortcutPath, false); Marshal.ReleaseComObject(iPersistFile); iPersistFile = null; Marshal.ReleaseComObject(iShellLink); iShellLink = null; Marshal.ReleaseComObject(cShellLink); cShellLink = null; return true; } catch //(System.Exception ex) { return false; } } /// <summary> /// 创建桌面快捷方式 /// </summary> /// <param name="targetPath">可执行文件路径</param> /// <param name="description">快捷方式名称</param>