From 21384a55c87e6643c6c2914e5f2a3f3bcc8a0822 Mon Sep 17 00:00:00 2001 From: Grabacr07 Date: Mon, 8 Aug 2016 15:51:43 +0900 Subject: [PATCH 1/2] Reformat code. --- source/VirtualDesktop/Interop/IApplicationView.cs | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/source/VirtualDesktop/Interop/IApplicationView.cs b/source/VirtualDesktop/Interop/IApplicationView.cs index adf96fa..0feab8a 100644 --- a/source/VirtualDesktop/Interop/IApplicationView.cs +++ b/source/VirtualDesktop/Interop/IApplicationView.cs @@ -20,7 +20,7 @@ public interface IApplicationView int GetVisibility(out int visibility); - int SetCloak(APPLICATION_VIEW_CLOAK_TYPE cloakType, int unknown); + int SetCloak(ApplicationViewCloakType cloakType, int unknown); int GetPosition(ref Guid guid /* GUID for IApplicationViewPosition */, out IntPtr /* IApplicationViewPosition** */ position); @@ -58,9 +58,9 @@ public interface IApplicationView int CanReceiveInput(out bool canReceiveInput); - int GetCompatibilityPolicyType(out APPLICATION_VIEW_COMPATIBILITY_POLICY flags); + int GetCompatibilityPolicyType(out ApplicationViewCompatibilityPolicy flags); - int SetCompatibilityPolicyType(APPLICATION_VIEW_COMPATIBILITY_POLICY flags); + int SetCompatibilityPolicyType(ApplicationViewCompatibilityPolicy flags); int GetPositionPriority(out IntPtr /* IShellPositionerPriority** */ priority); @@ -114,19 +114,23 @@ public struct Rect public int Bottom; } - public enum APPLICATION_VIEW_CLOAK_TYPE : int + public enum ApplicationViewCloakType { + // ReSharper disable InconsistentNaming AVCT_NONE = 0, AVCT_DEFAULT = 1, AVCT_VIRTUAL_DESKTOP = 2 + // ReSharper restore InconsistentNaming } - public enum APPLICATION_VIEW_COMPATIBILITY_POLICY : int + public enum ApplicationViewCompatibilityPolicy { + // ReSharper disable InconsistentNaming AVCP_NONE = 0, AVCP_SMALL_SCREEN = 1, AVCP_TABLET_SMALL_SCREEN = 2, AVCP_VERY_SMALL_SCREEN = 3, AVCP_HIGH_SCALE_FACTOR = 4 + // ReSharper restore InconsistentNaming } } From ad774028a36ed9c5e2ca3715b123cb7c41873ee0 Mon Sep 17 00:00:00 2001 From: MrX13415 Date: Wed, 14 Feb 2018 16:30:33 +0100 Subject: [PATCH 2/2] Consider ApartmentState of the current Thread. This improves the misleading error about "not support" while running this from a non STA thread. This is not really a "real" solution or there are certainly better ways to do this, but the user will get a better understanding wahts wrong with there implementation, without looking into the source itself. --- source/VirtualDesktop/VirtualDesktop.static.cs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/source/VirtualDesktop/VirtualDesktop.static.cs b/source/VirtualDesktop/VirtualDesktop.static.cs index 06ca81e..80382b9 100644 --- a/source/VirtualDesktop/VirtualDesktop.static.cs +++ b/source/VirtualDesktop/VirtualDesktop.static.cs @@ -1,11 +1,13 @@ -using System; +using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Runtime.InteropServices; +using System.Threading; using WindowsDesktop.Interop; + namespace WindowsDesktop { partial class VirtualDesktop @@ -53,6 +55,12 @@ static VirtualDesktop() catch (Exception ex) { InitializationException = ex; + + // Throws an InvalidOpertaionException, informing the user, that this needs to be called + // from a Thread with ApartmentState "STA". + if (Thread.CurrentThread.GetApartmentState() != ApartmentState.STA) + throw ex; + _isSupportedInternal = false; }