• 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>
            /// <param name="iconLocation">快捷方式图标路径</param>
            /// <param name="workingDirectory">工作路径</param>
            /// <returns></returns>
            public static bool CreateDesktopShortcut(string targetPath, string description, string iconLocation = null, string workingDirectory = null)
            {
                if (string.IsNullOrEmpty(workingDirectory))
                {
                    workingDirectory = MyShortcut.GetDeskDir();
                }
                return MyShortcut.CreateShortcut(MyShortcut.GetDeskDir() + "\" + description + ".lnk", targetPath, workingDirectory, description, iconLocation);
            }
    
            /// <summary>
            /// 创建程序菜单快捷方式
            /// </summary>
            /// <param name="targetPath">可执行文件路径</param>
            /// <param name="description">快捷方式名称</param>
            /// <param name="menuName">程序菜单中子菜单名称,为空则不创建子菜单</param>
            /// <param name="iconLocation">快捷方式图标路径</param>
            /// <param name="workingDirectory">工作路径</param>
            /// <returns></returns>
            public static bool CreateProgramsShortcut(string targetPath, string description, string menuName, string iconLocation = null, string workingDirectory = null)
            {
                if (string.IsNullOrEmpty(workingDirectory))
                {
                    workingDirectory = MyShortcut.GetProgramsDir();
                }
                string shortcutPath = MyShortcut.GetProgramsDir();
                if (!string.IsNullOrEmpty(menuName))
                {
                    shortcutPath += "\" + menuName;
                    if (!System.IO.Directory.Exists(shortcutPath))
                    {
                        try
                        {
                            System.IO.Directory.CreateDirectory(shortcutPath);
                        }
                        catch //(System.Exception ex)
                        {
                            return false;
                        }
                    }
                }
                shortcutPath += "\" + description + ".lnk";
                return MyShortcut.CreateShortcut(shortcutPath, targetPath, workingDirectory, description, iconLocation);
            }
    
            public static bool AddFavorites(string url, string description, string folderName, string iconLocation = null, string workingDirectory = null)
            {
                if (string.IsNullOrEmpty(workingDirectory))
                {
                    workingDirectory = MyShortcut.GetProgramsDir();
                }
                string shortcutPath = MyShortcut.GetFavoriteDir();
                if (!string.IsNullOrEmpty(folderName))
                {
                    shortcutPath += "\" + folderName;
                    if (!System.IO.Directory.Exists(shortcutPath))
                    {
                        try
                        {
                            System.IO.Directory.CreateDirectory(shortcutPath);
                        }
                        catch //(System.Exception ex)
                        {
                            return false;
                        }
                    }
                }
                shortcutPath += "\" + description + ".lnk";
                return MyShortcut.CreateShortcut(shortcutPath, url, workingDirectory, description, iconLocation);
            }
    
            internal const uint SHGFP_TYPE_CURRENT = 0;
            internal const int MAX_PATH = 260;
            internal const uint CSIDL_COMMON_STARTMENU = 0x0016;              // All UsersStart Menu
            internal const uint CSIDL_COMMON_PROGRAMS = 0x0017;               // All UsersStart MenuPrograms
            internal const uint CSIDL_COMMON_DESKTOPDIRECTORY = 0x0019;       // All UsersDesktop
            internal const uint CSIDL_PROGRAM_FILES = 0x0026;                 // C:Program Files
            internal const uint CSIDL_FLAG_CREATE = 0x8000;                   // new for Win2K, or this in to force creation of folder
            internal const uint CSIDL_COMMON_FAVORITES = 0x001f;              // All Users Favorites
    
            [DllImport("shell32.dll", CharSet = CharSet.Unicode, PreserveSig = false)]
            internal static extern void SHGetFolderPathW(
                IntPtr hwndOwner,
                int nFolder,
                IntPtr hToken,
                uint dwFlags,
                IntPtr pszPath);
    
            internal static string SHGetFolderPath(int nFolder)
            {
                string pszPath = new string(' ', MAX_PATH);
                IntPtr bstr = Marshal.StringToBSTR(pszPath);
                SHGetFolderPathW(IntPtr.Zero, nFolder, IntPtr.Zero, SHGFP_TYPE_CURRENT, bstr);
                string path = Marshal.PtrToStringBSTR(bstr);
                int index = path.IndexOf('');
                string path2 = path.Substring(0, index);
                Marshal.FreeBSTR(bstr);
                return path2;
            }
    
    
            public static string GetSpecialFolderPath(uint csidl)
            {
                return SHGetFolderPath((int)(csidl | CSIDL_FLAG_CREATE));
            }
    
            public static string GetDeskDir()
            {
                return GetSpecialFolderPath(CSIDL_COMMON_DESKTOPDIRECTORY);
            }
    
            public static string GetProgramsDir()
            {
                return GetSpecialFolderPath(CSIDL_COMMON_PROGRAMS);
            }
    
            public static string GetFavoriteDir()
            {
                return GetSpecialFolderPath(CSIDL_COMMON_FAVORITES);
            }
        }
    }
    

      

  • 相关阅读:
    大数据笔记13:Hadoop安装之Hadoop的配置安装
    Android(java)学习笔记206:JNI之工具快速开发步骤
    Android(java)学习笔记205:JNI之编写jni程序适配所有处理器型号
    JS 实现Json查询方法
    js中call与apply用法
    大数运算(待续)
    HDU 2553(N皇后)(DFS)
    C++ STL:stack和queue
    快速幂取模(POJ 1995)
    位运算
  • 原文地址:https://www.cnblogs.com/xinbs/p/4420989.html
Copyright © 2020-2023  润新知