首页 > 学院 > 开发设计 > 正文

c# 纯代码方式创建快捷方式

2019-11-17 02:27:08
字体:
来源:转载
供稿:网友
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>
上一篇:译文---C#堆VS栈(Part Four)

下一篇:LINQ基础

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表