实例介绍
【实例简介】
调用方法:
Shortcut sc = new Shortcut();
sc.Path = "目标文件地址";
sc.Arguments = "启动参数";
sc.WorkingDirectory = "启动文件的文件夹";
sc.Description = "描述";
sc.Save("这个快捷方式保存在哪");
【实例截图】【核心代码】
using System; using System.Text; using System.Windows.Forms; using System.Runtime.InteropServices; namespace WindowsShortcut { static internal class NativeClasses { [Flags] internal enum SLR_MODE : uint { SLR_INVOKE_MSI = 0x80, SLR_NOLINKINFO = 0x40, SLR_NO_UI = 0x1, SLR_NOUPDATE = 0x8, SLR_NOSEARCH = 0x10, SLR_NOTRACK = 0x20, SLR_UPDATE = 0x4, SLR_NO_UI_WITH_MSG_PUMP = 0x101 } [Flags] internal enum STGM_ACCESS : uint { STGM_READ = 0x00000000, STGM_WRITE = 0x00000001, STGM_READWRITE = 0x00000002, STGM_SHARE_DENY_NONE = 0x00000040, STGM_SHARE_DENY_READ = 0x00000030, STGM_SHARE_DENY_WRITE = 0x00000020, STGM_SHARE_EXCLUSIVE = 0x00000010, STGM_PRIORITY = 0x00040000, STGM_CREATE = 0x00001000, STGM_CONVERT = 0x00020000, STGM_FAILIFTHERE = 0x00000000, STGM_DIRECT = 0x00000000, STGM_TRANSACTED = 0x00010000, STGM_NOSCRATCH = 0x00100000, STGM_NOSNAPSHOT = 0x00200000, STGM_SIMPLE = 0x08000000, STGM_DIRECT_SWMR = 0x00400000, STGM_DELETEONRELEASE = 0x04000000 } [StructLayout(LayoutKind.Sequential, Pack = 4, Size = 0)] internal struct _FILETIME { public uint dwLowDateTime; public uint dwHighDateTime; } [StructLayout(LayoutKind.Sequential, Pack = 4, Size = 0, CharSet = CharSet.Unicode)] internal struct _WIN32_FIND_DATAW { public uint dwFileAttributes; public _FILETIME ftCreationTime; public _FILETIME ftLastAccessTime; public _FILETIME ftLastWriteTime; public uint nFileSizeHigh; public uint nFileSizeLow; public uint dwReserved0; public uint dwReserved1; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)] public string cFileName; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 14)] public string cAlternateFileName; } internal const uint SLGP_SHORTPATH = 0x01; internal const uint SLGP_UNCPRIORITY = 0x02; internal const uint SLGP_RAWPATH = 0x04; [ComImport()] [Guid("000214F9-0000-0000-C000-000000000046")] [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] internal interface IShellLinkW { [PreserveSig()] int GetPath([Out(), MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszFile, int cchMaxPath, ref _WIN32_FIND_DATAW pfd, uint fFlags); [PreserveSig()] int GetIDList(out IntPtr ppidl); [PreserveSig()] int SetIDList(IntPtr pidl); [PreserveSig()] int GetDescription([Out(), MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszFile, int cchMaxName); [PreserveSig()] int SetDescription([MarshalAs(UnmanagedType.LPWStr)] string pszName); [PreserveSig()] int GetWorkingDirectory([Out(), MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszDir, int cchMaxPath); [PreserveSig()] int SetWorkingDirectory( [MarshalAs(UnmanagedType.LPWStr)] string pszDir); [PreserveSig()] int GetArguments([Out(), MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszArgs, int cchMaxPath); [PreserveSig()] int SetArguments([MarshalAs(UnmanagedType.LPWStr)] string pszArgs); [PreserveSig()] int GetHotkey(out ushort pwHotkey); [PreserveSig()] int SetHotkey(ushort pwHotkey); [PreserveSig()] int GetShowCmd(out uint piShowCmd); [PreserveSig()] int SetShowCmd(uint piShowCmd); [PreserveSig()] int GetIconLocation([Out(), MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszIconPath, int cchIconPath, out int piIcon); [PreserveSig()] int SetIconLocation( [MarshalAs(UnmanagedType.LPWStr)] string pszIconPath, int iIcon); [PreserveSig()] int SetRelativePath([MarshalAs(UnmanagedType.LPWStr)] string pszPathRel, uint dwReserved); [PreserveSig()] int Resolve(IntPtr hWnd, uint fFlags); [PreserveSig()] int SetPath([MarshalAs(UnmanagedType.LPWStr)] string pszFile); } [ComImport()] [Guid("0000010B-0000-0000-C000-000000000046")] [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] internal interface IPersistFile { [PreserveSig()] int GetClassID(out Guid pClassID); [PreserveSig()] int IsDirty(); [PreserveSig()] int Load([MarshalAs(UnmanagedType.LPWStr)] string pszFileName, uint dwMode); [PreserveSig()] int Save([MarshalAs(UnmanagedType.LPWStr)] string pszFileName, [MarshalAs(UnmanagedType.Bool)] bool fRemember); [PreserveSig()] int SaveCompleted([MarshalAs(UnmanagedType.LPWStr)] string pszFileName); [PreserveSig()] int GetCurFile([Out(), MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszIconPath); } [Guid("00021401-0000-0000-C000-000000000046")] [ClassInterface(ClassInterfaceType.None)] [ComImport()] private class CShellLink { } internal static NativeClasses.IShellLinkW CreateShellLink() { return (NativeClasses.IShellLinkW)new NativeClasses.CShellLink(); } } public class Shortcut { private const int MAX_DESCRIPTION_LENGTH = 512; private const int MAX_PATH = 512; private NativeClasses.IShellLinkW _link; public Shortcut() { this._link = NativeClasses.CreateShellLink(); } public Shortcut(string path) : this() { Marshal.ThrowExceptionForHR(this._link.SetPath(path)); } public string Path { get { NativeClasses._WIN32_FIND_DATAW fdata = new NativeClasses._WIN32_FIND_DATAW(); StringBuilder path = new StringBuilder(MAX_PATH, MAX_PATH); Marshal.ThrowExceptionForHR(this._link.GetPath(path, path.MaxCapacity, ref fdata, NativeClasses.SLGP_UNCPRIORITY)); return path.ToString(); } set { Marshal.ThrowExceptionForHR(this._link.SetPath(value)); } } public string Description { get { StringBuilder desc = new StringBuilder(MAX_DESCRIPTION_LENGTH, MAX_DESCRIPTION_LENGTH); Marshal.ThrowExceptionForHR(this._link.GetDescription(desc, desc.MaxCapacity)); return desc.ToString(); } set { Marshal.ThrowExceptionForHR(this._link.SetDescription(value)); } } public string RelativePath { set { Marshal.ThrowExceptionForHR(this._link.SetRelativePath(value, 0)); } } public string WorkingDirectory { get { StringBuilder dir = new StringBuilder(MAX_PATH, MAX_PATH); Marshal.ThrowExceptionForHR(this._link.GetWorkingDirectory(dir, dir.MaxCapacity)); return dir.ToString(); } set { Marshal.ThrowExceptionForHR(this._link.SetWorkingDirectory(value)); } } public string Arguments { get { StringBuilder args = new StringBuilder(MAX_PATH, MAX_PATH); Marshal.ThrowExceptionForHR(this._link.GetArguments(args, args.MaxCapacity)); return args.ToString(); } set { Marshal.ThrowExceptionForHR(this._link.SetArguments(value)); } } public ushort HotKey { get { ushort key = 0; Marshal.ThrowExceptionForHR(this._link.GetHotkey(out key)); return key; } set { Marshal.ThrowExceptionForHR(this._link.SetHotkey(value)); } } public void Resolve(IntPtr hwnd, uint flags) { Marshal.ThrowExceptionForHR(this._link.Resolve(hwnd, flags)); } public void Resolve(IWin32Window window) { this.Resolve(window.Handle, 0); } public void Resolve() { this.Resolve(IntPtr.Zero, (uint)NativeClasses.SLR_MODE.SLR_NO_UI); } private NativeClasses.IPersistFile AsPersist { get { return ((NativeClasses.IPersistFile)this._link); } } public void Save(string fileName) { int hres = this.AsPersist.Save(fileName, true); Marshal.ThrowExceptionForHR(hres); } public void Load(string fileName) { int hres = this.AsPersist.Load(fileName, (uint)NativeClasses.STGM_ACCESS.STGM_READ); Marshal.ThrowExceptionForHR(hres); } } }
标签: 快捷方式
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论