From 748d9109b23192f7c601cd1dc27dd4ea5a3aa431 Mon Sep 17 00:00:00 2001 From: Paddy Xu Date: Thu, 7 May 2020 21:27:09 +0300 Subject: [PATCH] Fix #623: resolve LNK as early as possible --- QuickLook/NativeMethods/QuickLook.cs | 18 +++++++++++++++++- QuickLook/PipeServerManager.cs | 15 --------------- 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/QuickLook/NativeMethods/QuickLook.cs b/QuickLook/NativeMethods/QuickLook.cs index 0a6b1f05..ed0122ca 100644 --- a/QuickLook/NativeMethods/QuickLook.cs +++ b/QuickLook/NativeMethods/QuickLook.cs @@ -17,7 +17,9 @@ using System; using System.Diagnostics; +using System.IO; using System.Runtime.InteropServices; +using System.Runtime.InteropServices.ComTypes; using System.Text; using System.Threading.Tasks; @@ -99,7 +101,21 @@ namespace QuickLook.NativeMethods Debug.WriteLine(e); } - return sb?.ToString() ?? string.Empty; + return ResolveShortcut(sb?.ToString() ?? string.Empty); + } + + private static string ResolveShortcut(string path) + { + if (string.IsNullOrEmpty(path)) return path; + + if (Path.GetExtension(path).ToLower() != ".lnk") return path; + + var link = new ShellLink(); + ((IPersistFile) link).Load(path, 0); + var sb = new StringBuilder(MaxPath); + ((IShellLinkW) link).GetPath(sb, sb.Capacity, out _, 0); + + return sb.Length == 0 ? path : sb.ToString(); } internal enum FocusedWindowType diff --git a/QuickLook/PipeServerManager.cs b/QuickLook/PipeServerManager.cs index 9970b0eb..4c20bc40 100644 --- a/QuickLook/PipeServerManager.cs +++ b/QuickLook/PipeServerManager.cs @@ -125,9 +125,6 @@ namespace QuickLook var wParam = msg.Substring(0, split); var lParam = msg.Substring(split + 1, msg.Length - split - 1); - if (!string.IsNullOrEmpty(lParam)) - lParam = ResolveShortcut(lParam); - switch (wParam) { case PipeMessages.RunAndClose: @@ -171,17 +168,5 @@ namespace QuickLook { return _instance ?? (_instance = new PipeServerManager()); } - - public static string ResolveShortcut(string filename) - { - if (Path.GetExtension(filename).ToLower() != ".lnk") - return filename; - - var link = new ShellLink(); - ((IPersistFile) link).Load(filename, 0); - var sb = new StringBuilder(260); - ((IShellLinkW) link).GetPath(sb, sb.Capacity, out _, 0); - return sb.ToString(); - } } } \ No newline at end of file