如何从 UWP 应用访问 *.lnk 文件(快捷方式)

How to access *.lnk files, (shortcuts) from a UWP app

我希望能够从桌面上的任何文件夹访问 *.lnk 文件。 我知道 Windows.Storage 无法访问 *.lnk 文件,但我可以从 Win32 或 WPF 应用程序中的 System.IO 读取和访问它们。 有没有办法让我将 FindFirstFileEx() 合并到我的应用程序中而不会出现访问权限错误? 我看过有关 FullTrustProcessLauncher Class 和 CustomCapabilities 设置的文章,但没有使用 Kernal32 方法的示例,也没有关于是否可行的建议。

but no examples using Kernal32 methods

对于这种情况,可以使用desktop-bridge桌面扩展来解决,详细步骤请参考stfan的博客UWP with Desktop Extension

使用Kernal32方法,请参考pinvoke document

public enum FINDEX_INFO_LEVELS
{
    FindExInfoStandard = 0,
    FindExInfoBasic = 1
}
public enum FINDEX_SEARCH_OPS
{
    FindExSearchNameMatch = 0,
    FindExSearchLimitToDirectories = 1,
    FindExSearchLimitToDevices = 2
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
public struct WIN32_FIND_DATA
{
    public uint dwFileAttributes;
    public System.Runtime.InteropServices.ComTypes.FILETIME ftCreationTime;
    public System.Runtime.InteropServices.ComTypes.FILETIME ftLastAccessTime;
    public System.Runtime.InteropServices.ComTypes.FILETIME 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;
}

[DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
public static extern IntPtr FindFirstFileEx(
 string lpFileName,
 FINDEX_INFO_LEVELS fInfoLevelId,
 out WIN32_FIND_DATA lpFindFileData,
 FINDEX_SEARCH_OPS fSearchOp,
 IntPtr lpSearchFilter,
 int dwAdditionalFlags);