获得快捷方式指向的路径

using System.Runtime.InteropServices;
 
[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:/temp/temp.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();
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值