c# 通过快捷方式读取目标路径

public enum SLR_FLAGS {
            SLR_NO_UI = 0x1,
            SLR_ANY_MATCH = 0x2,
            SLR_UPDATE = 0x4,
            SLR_NOUPDATE = 0x8,
            SLR_NOSEARCH = 0x10,
            SLR_NOTRACK = 0x20,
            SLR_NOLINKINFO = 0x40,
            SLR_INVOKE_MSI = 0x80
        }
        [Flags()]
        public enum SLGP_FLAGS {
            SLGP_SHORTPATH = 0x1,
            SLGP_UNCPRIORITY = 0x2,
            SLGP_RAWPATH = 0x4
        }

        [StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
        // Unicode version
        public struct WIN32_FIND_DATA {
            public int dwFileAttributes;
            public FILETIME ftCreationTime;
            public FILETIME ftLastAccessTime;
            public FILETIME ftLastWriteTime;
            public int nFileSizeHigh;
            public int nFileSizeLow;
            public int dwReserved0;
            public int dwReserved1;
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = MAX_PATH)]
            public string cFileName;
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 14)]
            public string cAlternateFileName;
            private const int MAX_PATH = 260;
        }
        [
         ComImport(),
         InterfaceType(ComInterfaceType.InterfaceIsIUnknown),
         Guid("000214F9-0000-0000-C000-000000000046")
         ]

        // Unicode version
        public interface IShellLink {
            void GetPath(
              [Out(), MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszFile,
              int cchMaxPath,
              out WIN32_FIND_DATA pfd,
              SLGP_FLAGS fFlags);
        }

        [ComImport(),Guid("00021401-0000-0000-C000-000000000046")]

        private class ShellLink {}

        public static string getLnkPath(string path) {
            IShellLink vShellLink = (IShellLink)new ShellLink();
            UCOMIPersistFile vPersistFile = vShellLink as UCOMIPersistFile;
            vPersistFile.Load(path, 0);
            StringBuilder vStringBuilder = new StringBuilder(260);
            WIN32_FIND_DATA vWIN32_FIND_DATA;
            vShellLink.GetPath(vStringBuilder, vStringBuilder.Capacity,out vWIN32_FIND_DATA, SLGP_FLAGS.SLGP_RAWPATH);
            return vStringBuilder.ToString();
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值