Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何解析c中的a.lnk#_C#_.net - Fatal编程技术网

C# 如何解析c中的a.lnk#

C# 如何解析c中的a.lnk#,c#,.net,C#,.net,我需要找出a.lnk使用c#指向的文件/目录名 最简单的方法是什么 谢谢。这可能会有帮助: 本质上 在“添加引用”对话框的“COM”选项卡中添加对Windows脚本主机对象模型的引用 IWshRuntimeLibrary.IWshShell shell = new IWshRuntimeLibrary.WshShell(); IWshRuntimeLibrary.IWshShortcut shortcut = (IWshRuntimeLibrary.IWshShortcut)shell.Cr

我需要找出a.lnk使用c#指向的文件/目录名

最简单的方法是什么

谢谢。

这可能会有帮助:

本质上

在“添加引用”对话框的“COM”选项卡中添加对Windows脚本主机对象模型的引用

IWshRuntimeLibrary.IWshShell shell = new IWshRuntimeLibrary.WshShell();

IWshRuntimeLibrary.IWshShortcut shortcut = (IWshRuntimeLibrary.IWshShortcut)shell.CreateShortcut(link);

Console.WriteLine(shortcut.TargetPath);

再加上Kev说的话

如果使用的是csc.exe而不是Visual Studio,则要添加对Windows脚本主机对象模型的引用,必须:

  • 使用tlbimp.exe工具创建托管程序集:

    tlbimp.exe c:\windows\system32\wshom.ocx/out:iwrshrantimelibrary.dll

  • 使用csc.exe中的/r开关引用.dll:

    csc.exe Lnk.cs/r:iwshurantimelibrary.dll


我是为视频浏览器写的,它工作得非常好

#region Signitures imported from http://pinvoke.net

[DllImport("shfolder.dll", CharSet = CharSet.Auto)]
internal static extern int SHGetFolderPath(IntPtr hwndOwner, int nFolder, IntPtr hToken, int dwFlags, StringBuilder lpszPath);

[Flags()]
enum SLGP_FLAGS
{
    /// <summary>Retrieves the standard short (8.3 format) file name</summary>
    SLGP_SHORTPATH = 0x1,
    /// <summary>Retrieves the Universal Naming Convention (UNC) path name of the file</summary>
    SLGP_UNCPRIORITY = 0x2,
    /// <summary>Retrieves the raw path name. A raw path is something that might not exist and may include environment variables that need to be expanded</summary>
    SLGP_RAWPATH = 0x4
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
struct WIN32_FIND_DATAW
{
    public uint dwFileAttributes;
    public long ftCreationTime;
    public long ftLastAccessTime;
    public long ftLastWriteTime;
    public uint nFileSizeHigh;
    public uint nFileSizeLow;
    public uint dwReserved0;
    public uint dwReserved1;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]
    public string cFileName;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 14)]
    public string cAlternateFileName;
}

[Flags()]
enum SLR_FLAGS
{
    /// <summary>
    /// Do not display a dialog box if the link cannot be resolved. When SLR_NO_UI is set,
    /// the high-order word of fFlags can be set to a time-out value that specifies the
    /// maximum amount of time to be spent resolving the link. The function returns if the
    /// link cannot be resolved within the time-out duration. If the high-order word is set
    /// to zero, the time-out duration will be set to the default value of 3,000 milliseconds
    /// (3 seconds). To specify a value, set the high word of fFlags to the desired time-out
    /// duration, in milliseconds.
    /// </summary>
    SLR_NO_UI = 0x1,
    /// <summary>Obsolete and no longer used</summary>
    SLR_ANY_MATCH = 0x2,
    /// <summary>If the link object has changed, update its path and list of identifiers.
    /// If SLR_UPDATE is set, you do not need to call IPersistFile::IsDirty to determine
    /// whether or not the link object has changed.</summary>
    SLR_UPDATE = 0x4,
    /// <summary>Do not update the link information</summary>
    SLR_NOUPDATE = 0x8,
    /// <summary>Do not execute the search heuristics</summary>
    SLR_NOSEARCH = 0x10,
    /// <summary>Do not use distributed link tracking</summary>
    SLR_NOTRACK = 0x20,
    /// <summary>Disable distributed link tracking. By default, distributed link tracking tracks
    /// removable media across multiple devices based on the volume name. It also uses the
    /// Universal Naming Convention (UNC) path to track remote file systems whose drive letter
    /// has changed. Setting SLR_NOLINKINFO disables both types of tracking.</summary>
    SLR_NOLINKINFO = 0x40,
    /// <summary>Call the Microsoft Windows Installer</summary>
    SLR_INVOKE_MSI = 0x80
}


/// <summary>The IShellLink interface allows Shell links to be created, modified, and resolved</summary>
[ComImport(), InterfaceType(ComInterfaceType.InterfaceIsIUnknown), Guid("000214F9-0000-0000-C000-000000000046")]
interface IShellLinkW
{
    /// <summary>Retrieves the path and file name of a Shell link object</summary>
    void GetPath([Out(), MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszFile, int cchMaxPath, out WIN32_FIND_DATAW pfd, SLGP_FLAGS fFlags);
    /// <summary>Retrieves the list of item identifiers for a Shell link object</summary>
    void GetIDList(out IntPtr ppidl);
    /// <summary>Sets the pointer to an item identifier list (PIDL) for a Shell link object.</summary>
    void SetIDList(IntPtr pidl);
    /// <summary>Retrieves the description string for a Shell link object</summary>
    void GetDescription([Out(), MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszName, int cchMaxName);
    /// <summary>Sets the description for a Shell link object. The description can be any application-defined string</summary>
    void SetDescription([MarshalAs(UnmanagedType.LPWStr)] string pszName);
    /// <summary>Retrieves the name of the working directory for a Shell link object</summary>
    void GetWorkingDirectory([Out(), MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszDir, int cchMaxPath);
    /// <summary>Sets the name of the working directory for a Shell link object</summary>
    void SetWorkingDirectory([MarshalAs(UnmanagedType.LPWStr)] string pszDir);
    /// <summary>Retrieves the command-line arguments associated with a Shell link object</summary>
    void GetArguments([Out(), MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszArgs, int cchMaxPath);
    /// <summary>Sets the command-line arguments for a Shell link object</summary>
    void SetArguments([MarshalAs(UnmanagedType.LPWStr)] string pszArgs);
    /// <summary>Retrieves the hot key for a Shell link object</summary>
    void GetHotkey(out short pwHotkey);
    /// <summary>Sets a hot key for a Shell link object</summary>
    void SetHotkey(short wHotkey);
    /// <summary>Retrieves the show command for a Shell link object</summary>
    void GetShowCmd(out int piShowCmd);
    /// <summary>Sets the show command for a Shell link object. The show command sets the initial show state of the window.</summary>
    void SetShowCmd(int iShowCmd);
    /// <summary>Retrieves the location (path and index) of the icon for a Shell link object</summary>
    void GetIconLocation([Out(), MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszIconPath,
        int cchIconPath, out int piIcon);
    /// <summary>Sets the location (path and index) of the icon for a Shell link object</summary>
    void SetIconLocation([MarshalAs(UnmanagedType.LPWStr)] string pszIconPath, int iIcon);
    /// <summary>Sets the relative path to the Shell link object</summary>
    void SetRelativePath([MarshalAs(UnmanagedType.LPWStr)] string pszPathRel, int dwReserved);
    /// <summary>Attempts to find the target of a Shell link, even if it has been moved or renamed</summary>
    void Resolve(IntPtr hwnd, SLR_FLAGS fFlags);
    /// <summary>Sets the path and file name of a Shell link object</summary>
    void SetPath([MarshalAs(UnmanagedType.LPWStr)] string pszFile);

}

[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([In, MarshalAs(UnmanagedType.LPWStr)]
    string pszFileName, uint dwMode);

    [PreserveSig]
    void Save([In, MarshalAs(UnmanagedType.LPWStr)] string pszFileName,
        [In, MarshalAs(UnmanagedType.Bool)] bool fRemember);

    [PreserveSig]
    void SaveCompleted([In, MarshalAs(UnmanagedType.LPWStr)] string pszFileName);

    [PreserveSig]
    void GetCurFile([In, MarshalAs(UnmanagedType.LPWStr)] string ppszFileName);
}

const uint STGM_READ = 0;
const int MAX_PATH = 260;

// CLSID_ShellLink from ShlGuid.h 
[
    ComImport(),
    Guid("00021401-0000-0000-C000-000000000046")
]
public class ShellLink
{
}

#endregion 


public static string ResolveShortcut(string filename)
{
    ShellLink link = new ShellLink();
    ((IPersistFile)link).Load(filename, STGM_READ);
    // TODO: if I can get hold of the hwnd call resolve first. This handles moved and renamed files.  
    // ((IShellLinkW)link).Resolve(hwnd, 0) 
    StringBuilder sb = new StringBuilder(MAX_PATH);
    WIN32_FIND_DATAW data = new WIN32_FIND_DATAW();
    ((IShellLinkW)link).GetPath(sb, sb.Capacity, out data, 0);
    return sb.ToString(); 
}
#从导入的区域符号http://pinvoke.net
[DllImport(“shfolder.dll”,CharSet=CharSet.Auto)]
内部静态外部int-SHGetFolderPath(IntPtr-hwndOwner、int-nFolder、IntPtr-hToken、int-dwFlags、StringBuilder-lpszPath);
[标志()]
枚举SLGP_标志
{
///检索标准短(8.3格式)文件名
SLGP_短路径=0x1,
///检索文件的通用命名约定(UNC)路径名
SLGP_UNCPRIORITY=0x2,
///检索原始路径名称。原始路径可能不存在,并且可能包含需要扩展的环境变量
SLGP_RAWPATH=0x4
}
[StructLayout(LayoutKind.Sequential,CharSet=CharSet.Auto)]
结构WIN32\u查找\u数据w
{
公共uint-dwFileAttributes;
公共时间长;
公共时间长;
公共长ftLastWriteTime;
公共单位净收益率高;
公共部门和公共部门;
公共单位数据保留0;
保留的公共单位1;
[Marshallas(UnmanagedType.ByValTStr,SizeConst=260)]
公共字符串cFileName;
[Marshallas(UnmanagedType.ByValTStr,SizeConst=14)]
公共字符串cAlternateFileName;
}
[标志()]
枚举SLR_标志
{
/// 
///如果无法解析链接,则不显示对话框。当设置SLR\u NO\u UI时,
///fFlags的高阶字可以设置为一个超时值,该值指定
///解析链接所花费的最大时间。如果
///在超时持续时间内无法解析链接。如果设置了高位字
///如果设置为零,则超时持续时间将设置为默认值3000毫秒
///(3秒)。要指定值,请将fFlags的高位字设置为所需的超时
///持续时间,以毫秒为单位。
/// 
单反编号=0x1,
///过时和不再使用
单反任意匹配=0x2,
///如果链接对象已更改,请更新其路径和标识符列表。
///如果设置了SLR_更新,则无需调用IPersistFile::IsDirty来确定
///链接对象是否已更改。
SLR_更新=0x4,
///不要更新链接信息
单反更新=0x8,
///不要执行搜索启发式
单反车头拱=0x10,
///不要使用分布式链接跟踪
SLR_NOTRACK=0x20,
///禁用分布式链接跟踪。默认情况下,分布式链接跟踪跟踪
///基于卷名跨多个设备移动媒体。它还使用
///通用命名约定(UNC)路径,用于跟踪驱动器号为
///已更改。设置SLR\u NOLINKINFO将禁用这两种类型的跟踪。
SLR_NOLINKINFO=0x40,
///请致电Microsoft Windows安装程序
SLR_INVOKE_MSI=0x80
}
///IShellLink接口允许创建、修改和解析Shell链接
[ComImport(),接口类型(ComInterfaceType.InterfaceSiunknown),Guid(“000214F9-0000-0000-C000-0000000000 46”)]
接口IShellLinkW
{
///检索Shell链接对象的路径和文件名
void GetPath([Out(),marshallas(UnmanagedType.LPWStr)]StringBuilder pszFile,int-cchMaxPath,Out-WIN32\u-FIND\u-DATAW-pfd,SLGP\u-FLAGS-fFlags);
///检索Shell链接对象的项标识符列表
void GetIDList(out IntPtr ppidl);
///设置指向Shell链接对象的项标识符列表(PIDL)的指针。
void SetIDList(IntPtr-pidl);
///检索Shell链接对象的描述字符串
void GetDescription([Out(),marshallas(UnmanagedType.LPWStr)]StringBuilder pszName,int-cchMaxName);
///设置外壳链接对象的说明。说明可以是任何应用程序定义的字符串
void SetDescription([marshallas(UnmanagedType.LPWStr)]字符串pszName);
///检索Shell链接对象的工作目录的名称
void GetWorkingDirectory([Out(),marshallas(UnmanagedType.LPWStr)]StringBuilder pszDir,int-cchMaxPath);
///设置Shell链接对象的工作目录的名称
void SetWorkingDirectory([marshallas(UnmanagedType.LPWStr)]字符串pszDir);
///检索与Shell链接对象关联的命令行参数
void GetArguments([Out(),marshallas(UnmanagedType.LPWStr)]StringBuilder pszArgs,int-cchMaxPath);
///设置Shell链接对象的命令行参数
void SetArguments([Marshallas(UnmanagedType.LPWStr)]字符串pszArgs);
///检索Shell链接对象的热键
void GetHotkey(out short pwHotkey);
///设置外壳链接对象的热键
无效设置热键(短wHotkey);
///检索Shell链接对象的show命令
void GetShowCmd(out int piShowCmd);
///设置Shell链接对象的show命令。show命令设置窗口的初始显示状态。
void SetShowCmd(int-iShowCmd);
///检索Shell链接对象的图标位置(路径和索引)
void GetIconLocation([Out(),marshallas(UnmanagedType.LPWStr)]StringBuilder pszIconPath,
int CCICONPATH,out int piIcon);
///为Shell链接对象设置图标的位置(路径和索引)
void SetIconLocation([Marshal