如何从 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);
我希望能够从桌面上的任何文件夹访问 *.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);