diff --git a/sources/Google.Solutions.IapDesktop.Extensions.Shell/Services/ConnectionSettings/ConnectionSettings.cs b/sources/Google.Solutions.IapDesktop.Extensions.Shell/Services/ConnectionSettings/ConnectionSettings.cs index addcdbe6f..cef1c6572 100644 --- a/sources/Google.Solutions.IapDesktop.Extensions.Shell/Services/ConnectionSettings/ConnectionSettings.cs +++ b/sources/Google.Solutions.IapDesktop.Extensions.Shell/Services/ConnectionSettings/ConnectionSettings.cs @@ -189,6 +189,20 @@ public enum RdpNetworkLevelAuthentication _Default = Enabled } + public enum RdpHookWindowsKeys + { + // + // NB. Values correspond to IMsRdpClientSecuredSettings::KeyboardHookMode. + // + Never = 0, + Always = 1, + FullScreenOnly = 2, + + + [Browsable(false)] + _Default = FullScreenOnly + } + public abstract class ConnectionSettingsBase : IRegistrySettingsCollection { //--------------------------------------------------------------------- @@ -215,6 +229,7 @@ public abstract class ConnectionSettingsBase : IRegistrySettingsCollection public RegistryEnumSetting RdpRedirectPort { get; private set; } public RegistryEnumSetting RdpRedirectDrive { get; private set; } public RegistryEnumSetting RdpRedirectDevice { get; private set; } + public RegistryEnumSetting RdpHookWindowsKeys { get; private set; } internal IEnumerable RdpSettings => new ISetting[] { @@ -237,7 +252,8 @@ public abstract class ConnectionSettingsBase : IRegistrySettingsCollection this.RdpRedirectSmartCard, this.RdpRedirectPort, this.RdpRedirectDrive, - this.RdpRedirectDevice + this.RdpRedirectDevice, + this.RdpHookWindowsKeys }; internal bool IsRdpSetting(ISetting setting) => this.RdpSettings.Contains(setting); @@ -429,6 +445,13 @@ protected void InitializeFromKey(RegistryKey key) Categories.RdpResources, ConnectionSettings.RdpRedirectDevice._Default, key); + this.RdpHookWindowsKeys = RegistryEnumSetting.FromKey( + "RdpHookWindowsKeys", + "Enable Windows shortcuts", + "Enable Windows shortcuts (like Win+R)", + Categories.RdpAdvanced, + ConnectionSettings.RdpHookWindowsKeys._Default, + key); // // SSH Settings. @@ -509,6 +532,8 @@ protected static void ApplyOverlay( baseSettings.RdpRedirectDrive.OverlayBy(overlaySettings.RdpRedirectDrive); prototype.RdpRedirectDevice = (RegistryEnumSetting) baseSettings.RdpRedirectDevice.OverlayBy(overlaySettings.RdpRedirectDevice); + prototype.RdpHookWindowsKeys = (RegistryEnumSetting) + baseSettings.RdpHookWindowsKeys.OverlayBy(overlaySettings.RdpHookWindowsKeys); prototype.SshPort = (RegistryDwordSetting) baseSettings.SshPort.OverlayBy(overlaySettings.SshPort); diff --git a/sources/Google.Solutions.IapDesktop.Extensions.Shell/Views/RemoteDesktop/RemoteDesktopPane.cs b/sources/Google.Solutions.IapDesktop.Extensions.Shell/Views/RemoteDesktop/RemoteDesktopPane.cs index 7f64810cb..b5e763456 100644 --- a/sources/Google.Solutions.IapDesktop.Extensions.Shell/Views/RemoteDesktop/RemoteDesktopPane.cs +++ b/sources/Google.Solutions.IapDesktop.Extensions.Shell/Views/RemoteDesktop/RemoteDesktopPane.cs @@ -355,9 +355,8 @@ InstanceConnectionSettings settings // // Keyboard settings. // - // NB. Apply key combinations to the remote server only when the client is running - // in full-screen mode. - this.rdpClient.SecuredSettings2.KeyboardHookMode = 2; + this.rdpClient.SecuredSettings2.KeyboardHookMode = + (int)settings.RdpHookWindowsKeys.EnumValue; advancedSettings.allowBackgroundInput = 1;