From bad5d3073145aca31ecffdee5be4ac6962e2a93b Mon Sep 17 00:00:00 2001 From: sliddington Date: Sun, 21 Aug 2016 18:39:39 +1000 Subject: [PATCH 1/5] Update ApplicationHelper.cs --- source/VirtualDesktop/ApplicationHelper.cs | 23 +++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/source/VirtualDesktop/ApplicationHelper.cs b/source/VirtualDesktop/ApplicationHelper.cs index 593a601..06d230e 100644 --- a/source/VirtualDesktop/ApplicationHelper.cs +++ b/source/VirtualDesktop/ApplicationHelper.cs @@ -9,16 +9,29 @@ public static class ApplicationHelper { internal static IApplicationView GetApplicationView(this IntPtr hWnd) { - IApplicationView view; - ComObjects.ApplicationViewCollection.GetViewForHwnd(hWnd, out view); - - return view; + try + { + IApplicationView view; + ComObjects.ApplicationViewCollection.GetViewForHwnd(hWnd, out view); + return view; + } + catch (System.Runtime.InteropServices.COMException ex) when (ex.Match(HResult.TYPE_E_ELEMENTNOTFOUND)) + { + return null; + } } public static string GetAppId(IntPtr hWnd) { + var view = hWnd.GetApplicationView(); + + if (view == null) + { + throw new ArgumentException(nameof(hWnd)); + } + string appId; - hWnd.GetApplicationView().GetAppUserModelId(out appId); + view.GetAppUserModelId(out appId); return appId; } From f418c320e29a9ab00f9167cc9098988d3df7daf7 Mon Sep 17 00:00:00 2001 From: sliddington Date: Sun, 21 Aug 2016 18:40:49 +1000 Subject: [PATCH 2/5] Handle view not found --- .../VirtualDesktop.static.pin.cs | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/source/VirtualDesktop/VirtualDesktop.static.pin.cs b/source/VirtualDesktop/VirtualDesktop.static.pin.cs index 6a3aaa6..0a84512 100644 --- a/source/VirtualDesktop/VirtualDesktop.static.pin.cs +++ b/source/VirtualDesktop/VirtualDesktop.static.pin.cs @@ -11,7 +11,14 @@ public static bool IsPinnedWindow(IntPtr hWnd) { VirtualDesktopHelper.ThrowIfNotSupported(); - return ComObjects.VirtualDesktopPinnedApps.IsViewPinned(hWnd.GetApplicationView()); + var view = hWnd.GetApplicationView(); + + if (view == null) + { + throw new ArgumentException(nameof(hWnd)); + } + + return ComObjects.VirtualDesktopPinnedApps.IsViewPinned(view); } public static void PinWindow(IntPtr hWnd) @@ -20,6 +27,11 @@ public static void PinWindow(IntPtr hWnd) var view = hWnd.GetApplicationView(); + if (view == null) + { + throw new ArgumentException(nameof(hWnd)); + } + if (!ComObjects.VirtualDesktopPinnedApps.IsViewPinned(view)) { ComObjects.VirtualDesktopPinnedApps.PinView(view); @@ -32,6 +44,11 @@ public static void UnpinWindow(IntPtr hWnd) var view = hWnd.GetApplicationView(); + if (view == null) + { + throw new ArgumentException(nameof(hWnd)); + } + if (ComObjects.VirtualDesktopPinnedApps.IsViewPinned(view)) { ComObjects.VirtualDesktopPinnedApps.UnpinView(view); From 6b5dae0bdea47204b6e91d9fcbca8ffa9acdc6f7 Mon Sep 17 00:00:00 2001 From: sliddington Date: Sun, 21 Aug 2016 18:42:04 +1000 Subject: [PATCH 3/5] Catch view not found from GetViewHwnd() --- source/VirtualDesktop/VirtualDesktopHelper.cs | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/source/VirtualDesktop/VirtualDesktopHelper.cs b/source/VirtualDesktop/VirtualDesktopHelper.cs index 11408f3..046163b 100644 --- a/source/VirtualDesktop/VirtualDesktopHelper.cs +++ b/source/VirtualDesktop/VirtualDesktopHelper.cs @@ -36,9 +36,16 @@ public static void MoveToDesktop(IntPtr hWnd, VirtualDesktop virtualDesktop) } else { - IApplicationView view; - ComObjects.ApplicationViewCollection.GetViewForHwnd(hWnd, out view); - ComObjects.VirtualDesktopManagerInternal.MoveViewToDesktop(view, virtualDesktop.ComObject); + try + { + IApplicationView view; + ComObjects.ApplicationViewCollection.GetViewForHwnd(hWnd, out view); + ComObjects.VirtualDesktopManagerInternal.MoveViewToDesktop(view, virtualDesktop.ComObject); + } + catch (System.Runtime.InteropServices.COMException ex) when (ex.Match(HResult.TYPE_E_ELEMENTNOTFOUND)) + { + throw new ArgumentException(nameof(hWnd)); + } } } } From e047a7db62c92edc06d142bf66b01322adf4eb37 Mon Sep 17 00:00:00 2001 From: sliddington Date: Sun, 21 Aug 2016 18:55:23 +1000 Subject: [PATCH 4/5] Add TogglePin functions again --- .../VirtualDesktop.static.pin.cs | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/source/VirtualDesktop/VirtualDesktop.static.pin.cs b/source/VirtualDesktop/VirtualDesktop.static.pin.cs index 0a84512..1c3e544 100644 --- a/source/VirtualDesktop/VirtualDesktop.static.pin.cs +++ b/source/VirtualDesktop/VirtualDesktop.static.pin.cs @@ -55,6 +55,27 @@ public static void UnpinWindow(IntPtr hWnd) } } + public static void TogglePinWindow(IntPtr hWnd) + { + VirtualDesktopHelper.ThrowIfNotSupported(); + + var view = hWnd.GetApplicationView(); + + if (view == null) + { + throw new ArgumentException(nameof(hWnd)); + } + + if (ComObjects.VirtualDesktopPinnedApps.IsViewPinned(view)) + { + ComObjects.VirtualDesktopPinnedApps.UnpinView(view); + } + else + { + ComObjects.VirtualDesktopPinnedApps.PinView(view); + } + } + public static bool IsPinnedApplication(string appId) { VirtualDesktopHelper.ThrowIfNotSupported(); @@ -81,5 +102,19 @@ public static void UnpinApplication(string appId) ComObjects.VirtualDesktopPinnedApps.UnpinAppID(appId); } } + + public static void TogglePinApplication(string appId) + { + VirtualDesktopHelper.ThrowIfNotSupported(); + + if (ComObjects.VirtualDesktopPinnedApps.IsAppIdPinned(appId)) + { + ComObjects.VirtualDesktopPinnedApps.UnpinAppID(appId appId); + } + else + { + ComObjects.VirtualDesktopPinnedApps.PinAppID(appId); + } + } } } From 7b07a72b9e892d1ed05ea91cd67aa69796bd4492 Mon Sep 17 00:00:00 2001 From: sliddington Date: Sun, 21 Aug 2016 19:00:59 +1000 Subject: [PATCH 5/5] Fix --- source/VirtualDesktop/VirtualDesktop.static.pin.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/VirtualDesktop/VirtualDesktop.static.pin.cs b/source/VirtualDesktop/VirtualDesktop.static.pin.cs index 1c3e544..aac6eb1 100644 --- a/source/VirtualDesktop/VirtualDesktop.static.pin.cs +++ b/source/VirtualDesktop/VirtualDesktop.static.pin.cs @@ -109,7 +109,7 @@ public static void TogglePinApplication(string appId) if (ComObjects.VirtualDesktopPinnedApps.IsAppIdPinned(appId)) { - ComObjects.VirtualDesktopPinnedApps.UnpinAppID(appId appId); + ComObjects.VirtualDesktopPinnedApps.UnpinAppID(appId); } else {