From 2af8d4c4caeb800ff4360ac596cfc37909bb72e7 Mon Sep 17 00:00:00 2001 From: Paddy Xu Date: Mon, 22 May 2017 00:37:12 +0300 Subject: [PATCH] detect Office installation --- .../PluginInterface.cs | 16 ++++--------- .../PreviewHandlerHost.cs | 6 +---- .../PreviewPanel.xaml.cs | 24 ++++++++++++------- 3 files changed, 21 insertions(+), 25 deletions(-) diff --git a/QuickLook.Plugin/QuickLook.Plugin.IPreviewHandlers/PluginInterface.cs b/QuickLook.Plugin/QuickLook.Plugin.IPreviewHandlers/PluginInterface.cs index 1fb61d8..d79edab 100644 --- a/QuickLook.Plugin/QuickLook.Plugin.IPreviewHandlers/PluginInterface.cs +++ b/QuickLook.Plugin/QuickLook.Plugin.IPreviewHandlers/PluginInterface.cs @@ -24,13 +24,14 @@ namespace QuickLook.Plugin.IPreviewHandlers case ".docx": case ".xls": case ".xlsx": + case ".bbb": case ".xlsm": // Visio Viewer will not quit after preview, which cause serious memory issue //case ".vsd": //case ".vsdx": case ".ppt": case ".pptx": - return true; + return PreviewHandlerHost.GetPreviewHandlerGUID(path) != Guid.Empty; } return false; @@ -47,11 +48,7 @@ namespace QuickLook.Plugin.IPreviewHandlers context.ViewerContent = _panel; context.Title = Path.GetFileName(path); - _panel.Loaded += (sender, e) => - { - _panel.PreviewFile(path); - SetForegroundWindow(new WindowInteropHelper(context.ViewerWindow).Handle); - }; + _panel.PreviewFile(path, context); context.IsBusy = false; } @@ -63,12 +60,7 @@ namespace QuickLook.Plugin.IPreviewHandlers _panel?.Dispose(); _panel = null; } - - - [DllImport("user32.dll")] - [return: MarshalAs(UnmanagedType.Bool)] - private static extern bool SetForegroundWindow(IntPtr hWnd); - + ~PluginInterface() { Cleanup(); diff --git a/QuickLook.Plugin/QuickLook.Plugin.IPreviewHandlers/PreviewHandlerHost.cs b/QuickLook.Plugin/QuickLook.Plugin.IPreviewHandlers/PreviewHandlerHost.cs index 2c5c22f..e77a770 100644 --- a/QuickLook.Plugin/QuickLook.Plugin.IPreviewHandlers/PreviewHandlerHost.cs +++ b/QuickLook.Plugin/QuickLook.Plugin.IPreviewHandlers/PreviewHandlerHost.cs @@ -61,7 +61,7 @@ namespace QuickLook.Plugin.IPreviewHandlers /// /// /// - private Guid GetPreviewHandlerGUID(string filename) + public static Guid GetPreviewHandlerGUID(string filename) { // open the registry key corresponding to the file extension var ext = Registry.ClassesRoot.OpenSubKey(Path.GetExtension(filename)); @@ -150,8 +150,4 @@ namespace QuickLook.Plugin.IPreviewHandlers } } } - - #region COM Interop - - #endregion } \ No newline at end of file diff --git a/QuickLook.Plugin/QuickLook.Plugin.IPreviewHandlers/PreviewPanel.xaml.cs b/QuickLook.Plugin/QuickLook.Plugin.IPreviewHandlers/PreviewPanel.xaml.cs index 0c165cb..ee4c6a3 100644 --- a/QuickLook.Plugin/QuickLook.Plugin.IPreviewHandlers/PreviewPanel.xaml.cs +++ b/QuickLook.Plugin/QuickLook.Plugin.IPreviewHandlers/PreviewPanel.xaml.cs @@ -1,6 +1,8 @@ using System; using System.Runtime.InteropServices; using System.Windows.Controls; +using System.Windows.Interop; +using System.Windows.Threading; namespace QuickLook.Plugin.IPreviewHandlers { @@ -9,7 +11,7 @@ namespace QuickLook.Plugin.IPreviewHandlers /// public partial class PreviewPanel : UserControl, IDisposable { - private PreviewHandlerHost _control = new PreviewHandlerHost(); + private PreviewHandlerHost _control; public PreviewPanel() { @@ -25,17 +27,23 @@ namespace QuickLook.Plugin.IPreviewHandlers _control = null; } - public void PreviewFile(string file) + public void PreviewFile(string file, ContextObject context) { - _control = new PreviewHandlerHost(); + Dispatcher.CurrentDispatcher.BeginInvoke(new Action(() => + { + _control = new PreviewHandlerHost(); + presenter.Child = _control; + _control.Open(file); + }), DispatcherPriority.Render); - presenter.Child = _control; - - _control.Open(file); - - SetActiveWindow(presenter.Handle); + //SetForegroundWindow(new WindowInteropHelper(context.ViewerWindow).Handle); + //SetActiveWindow(presenter.Handle); } + [DllImport("user32.dll")] + [return: MarshalAs(UnmanagedType.Bool)] + private static extern bool SetForegroundWindow(IntPtr hWnd); + [DllImport("user32.dll")] [return: MarshalAs(UnmanagedType.Bool)] private static extern bool SetActiveWindow(IntPtr hWnd);