C# 读取快捷方式指向的文件
C# 读取快捷方式指向的文件
[Flags()] 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); void GetIDList(out IntPtr ppidl); void SetIDList(IntPtr pidl); void GetDescription([Out(), MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszName,int cchMaxName); void SetDescription([MarshalAs(UnmanagedType.LPWStr)] string pszName); void GetWorkingDirectory([Out(), MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszDir,int cchMaxPath); void SetWorkingDirectory([MarshalAs(UnmanagedType.LPWStr)] string pszDir); void GetArguments([Out(), MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszArgs,int cchMaxPath); void SetArguments([MarshalAs(UnmanagedType.LPWStr)] string pszArgs); void GetHotkey(out short pwHotkey); void SetHotkey(short wHotkey); void GetShowCmd(out int piShowCmd); void SetShowCmd(int iShowCmd); void GetIconLocation([Out(), MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszIconPath,int cchIconPath,out int piIcon); void SetIconLocation([MarshalAs(UnmanagedType.LPWStr)] string pszIconPath,int iIcon); void SetRelativePath([MarshalAs(UnmanagedType.LPWStr)] string pszPathRel,int dwReserved); void Resolve(IntPtr hwnd,SLR_FLAGS fFlags); void SetPath([MarshalAs(UnmanagedType.LPWStr)] string pszFile); } [ComImport(),Guid("00021401-0000-0000-C000-000000000046")] public class ShellLink { } private void Form1_Load(object sender, EventArgs e) { IShellLink vShellLink = (IShellLink)new ShellLink(); UCOMIPersistFile vPersistFile = vShellLink as UCOMIPersistFile; vPersistFile.Load(@"C:\Users\guwei4037\Desktop\Adobe Flash Builder 4.6.lnk", 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); Text = vStringBuilder.ToString(); MessageBox.Show(Text);//result }