diff --git a/SafeExamBrowser.Client/ClientController.cs b/SafeExamBrowser.Client/ClientController.cs
index 7d0aa1db..2bc2332c 100644
--- a/SafeExamBrowser.Client/ClientController.cs
+++ b/SafeExamBrowser.Client/ClientController.cs
@@ -323,8 +323,9 @@ namespace SafeExamBrowser.Client
{
logger.Info("Reinitializing working area...");
displayMonitor.InitializePrimaryDisplay(taskbar.GetAbsoluteHeight());
- logger.Info("Reinitializing taskbar bounds...");
+ logger.Info("Reinitializing shell...");
taskbar.InitializeBounds();
+ actionCenter.UpdateTaskbarHeight(taskbar.GetRelativeHeight());
logger.Info("Desktop successfully restored.");
}
@@ -367,8 +368,9 @@ namespace SafeExamBrowser.Client
explorerShell.Terminate();
logger.Info("Reinitializing working area...");
displayMonitor.InitializePrimaryDisplay(taskbar.GetAbsoluteHeight());
- logger.Info("Reinitializing taskbar bounds...");
+ logger.Info("Reinitializing shell...");
taskbar.InitializeBounds();
+ actionCenter.UpdateTaskbarHeight(taskbar.GetRelativeHeight());
logger.Info("Desktop successfully restored.");
}
diff --git a/SafeExamBrowser.Client/CompositionRoot.cs b/SafeExamBrowser.Client/CompositionRoot.cs
index da324432..5bc839b1 100644
--- a/SafeExamBrowser.Client/CompositionRoot.cs
+++ b/SafeExamBrowser.Client/CompositionRoot.cs
@@ -98,7 +98,7 @@ namespace SafeExamBrowser.Client
windowMonitor = new WindowMonitor(new ModuleLogger(logger, nameof(WindowMonitor)), nativeMethods);
wirelessNetwork = new WirelessNetwork(new ModuleLogger(logger, nameof(WirelessNetwork)), text);
- var displayMonitor = new DisplayMonitor(new ModuleLogger(logger, nameof(DisplayMonitor)), nativeMethods);
+ var displayMonitor = new DisplayMonitor(new ModuleLogger(logger, nameof(DisplayMonitor)), nativeMethods, systemInfo);
var explorerShell = new ExplorerShell(new ModuleLogger(logger, nameof(ExplorerShell)), nativeMethods);
var hashAlgorithm = new HashAlgorithm();
diff --git a/SafeExamBrowser.Client/Operations/ShellOperation.cs b/SafeExamBrowser.Client/Operations/ShellOperation.cs
index 79f6ac56..745d68ab 100644
--- a/SafeExamBrowser.Client/Operations/ShellOperation.cs
+++ b/SafeExamBrowser.Client/Operations/ShellOperation.cs
@@ -106,6 +106,7 @@ namespace SafeExamBrowser.Client.Operations
{
logger.Info("Initializing action center...");
actionCenter.InitializeText(text);
+ actionCenter.UpdateTaskbarHeight(taskbar.GetRelativeHeight());
InitializeAboutNotificationForActionCenter();
InitializeClockForActionCenter();
diff --git a/SafeExamBrowser.Contracts/UserInterface/Shell/IActionCenter.cs b/SafeExamBrowser.Contracts/UserInterface/Shell/IActionCenter.cs
index a7caa1ca..778a5f61 100644
--- a/SafeExamBrowser.Contracts/UserInterface/Shell/IActionCenter.cs
+++ b/SafeExamBrowser.Contracts/UserInterface/Shell/IActionCenter.cs
@@ -61,6 +61,11 @@ namespace SafeExamBrowser.Contracts.UserInterface.Shell
///
void Register(IActionCenterActivator activator);
+ ///
+ /// Informs the action center about the relative height (i.e. height in logical pixels) of the taskbar.
+ ///
+ void UpdateTaskbarHeight(int height);
+
///
/// Makes the action center visible.
///
diff --git a/SafeExamBrowser.Contracts/UserInterface/Shell/ITaskbar.cs b/SafeExamBrowser.Contracts/UserInterface/Shell/ITaskbar.cs
index ace8cd4c..df736c3a 100644
--- a/SafeExamBrowser.Contracts/UserInterface/Shell/ITaskbar.cs
+++ b/SafeExamBrowser.Contracts/UserInterface/Shell/ITaskbar.cs
@@ -51,6 +51,11 @@ namespace SafeExamBrowser.Contracts.UserInterface.Shell
///
int GetAbsoluteHeight();
+ ///
+ /// Returns the relative height of the taskbar (i.e. in logical pixels).
+ ///
+ int GetRelativeHeight();
+
///
/// Moves the taskbar to the bottom of and resizes it according to the current working area.
///
diff --git a/SafeExamBrowser.Monitoring/Display/DisplayMonitor.cs b/SafeExamBrowser.Monitoring/Display/DisplayMonitor.cs
index 25082172..decd5b15 100644
--- a/SafeExamBrowser.Monitoring/Display/DisplayMonitor.cs
+++ b/SafeExamBrowser.Monitoring/Display/DisplayMonitor.cs
@@ -12,7 +12,9 @@ using Microsoft.Win32;
using SafeExamBrowser.Contracts.Logging;
using SafeExamBrowser.Contracts.Monitoring;
using SafeExamBrowser.Contracts.Monitoring.Events;
+using SafeExamBrowser.Contracts.SystemComponents;
using SafeExamBrowser.Contracts.WindowsApi;
+using OperatingSystem = SafeExamBrowser.Contracts.SystemComponents.OperatingSystem;
namespace SafeExamBrowser.Monitoring.Display
{
@@ -21,14 +23,16 @@ namespace SafeExamBrowser.Monitoring.Display
private IBounds originalWorkingArea;
private ILogger logger;
private INativeMethods nativeMethods;
+ private ISystemInfo systemInfo;
private string wallpaper;
public event DisplayChangedEventHandler DisplayChanged;
- public DisplayMonitor(ILogger logger, INativeMethods nativeMethods)
+ public DisplayMonitor(ILogger logger, INativeMethods nativeMethods, ISystemInfo systemInfo)
{
this.logger = logger;
this.nativeMethods = nativeMethods;
+ this.systemInfo = systemInfo;
}
public void InitializePrimaryDisplay(int taskbarHeight)
@@ -89,12 +93,16 @@ namespace SafeExamBrowser.Monitoring.Display
private void InitializeWallpaper()
{
- var path = nativeMethods.GetWallpaperPath();
-
- if (!String.IsNullOrEmpty(path))
+ if (systemInfo.OperatingSystem == OperatingSystem.Windows7)
{
- wallpaper = path;
- logger.Info($"Saved wallpaper image: {wallpaper}.");
+ var path = nativeMethods.GetWallpaperPath();
+
+ if (!String.IsNullOrEmpty(path))
+ {
+ wallpaper = path;
+ logger.Info($"Saved wallpaper image: {wallpaper}.");
+ }
+
nativeMethods.RemoveWallpaper();
logger.Info("Removed current wallpaper.");
}
@@ -117,7 +125,7 @@ namespace SafeExamBrowser.Monitoring.Display
private void ResetWallpaper()
{
- if (!String.IsNullOrEmpty(wallpaper))
+ if (systemInfo.OperatingSystem == OperatingSystem.Windows7 && !String.IsNullOrEmpty(wallpaper))
{
nativeMethods.SetWallpaper(wallpaper);
logger.Info($"Restored wallpaper image: {wallpaper}.");
diff --git a/SafeExamBrowser.Runtime/Operations/KioskModeOperation.cs b/SafeExamBrowser.Runtime/Operations/KioskModeOperation.cs
index 36938d51..a18be553 100644
--- a/SafeExamBrowser.Runtime/Operations/KioskModeOperation.cs
+++ b/SafeExamBrowser.Runtime/Operations/KioskModeOperation.cs
@@ -134,7 +134,7 @@ namespace SafeExamBrowser.Runtime.Operations
}
else
{
- logger.Warn($"No original desktop found when attempting to close new desktop!");
+ logger.Warn($"No original desktop found to activate!");
}
if (NewDesktop != null)
@@ -144,7 +144,7 @@ namespace SafeExamBrowser.Runtime.Operations
}
else
{
- logger.Warn($"No new desktop found when attempting to close new desktop!");
+ logger.Warn($"No new desktop found to close!");
}
explorerShell.Resume();
diff --git a/SafeExamBrowser.UserInterface.Desktop/ActionCenter.xaml.cs b/SafeExamBrowser.UserInterface.Desktop/ActionCenter.xaml.cs
index b0530eb3..edf25954 100644
--- a/SafeExamBrowser.UserInterface.Desktop/ActionCenter.xaml.cs
+++ b/SafeExamBrowser.UserInterface.Desktop/ActionCenter.xaml.cs
@@ -17,6 +17,8 @@ namespace SafeExamBrowser.UserInterface.Desktop
{
public partial class ActionCenter : Window, IActionCenter
{
+ private int taskbarHeight = 40;
+
public bool ShowClock
{
set { Dispatcher.Invoke(() => Clock.Visibility = value ? Visibility.Visible : Visibility.Collapsed); }
@@ -82,6 +84,11 @@ namespace SafeExamBrowser.UserInterface.Desktop
Dispatcher.Invoke(ShowAnimated);
}
+ public void UpdateTaskbarHeight(int height)
+ {
+ taskbarHeight = height;
+ }
+
private void HideAnimated()
{
var storyboard = new Storyboard();
@@ -125,7 +132,7 @@ namespace SafeExamBrowser.UserInterface.Desktop
private void InitializeBounds()
{
- Height = SystemParameters.WorkArea.Height;
+ Height = SystemParameters.PrimaryScreenHeight - taskbarHeight;
Top = 0;
Left = -Width;
}
diff --git a/SafeExamBrowser.UserInterface.Desktop/Taskbar.xaml.cs b/SafeExamBrowser.UserInterface.Desktop/Taskbar.xaml.cs
index 2c59624e..24deb9c7 100644
--- a/SafeExamBrowser.UserInterface.Desktop/Taskbar.xaml.cs
+++ b/SafeExamBrowser.UserInterface.Desktop/Taskbar.xaml.cs
@@ -71,7 +71,19 @@ namespace SafeExamBrowser.UserInterface.Desktop
{
var height = (int) this.TransformToPhysical(Width, Height).Y;
- logger.Info($"Calculated physical taskbar height is {height}px.");
+ logger.Debug($"Calculated physical taskbar height is {height}px.");
+
+ return height;
+ });
+ }
+
+ public int GetRelativeHeight()
+ {
+ return Dispatcher.Invoke(() =>
+ {
+ var height = (int) Height;
+
+ logger.Debug($"Logical taskbar height is {height}px.");
return height;
});
@@ -81,14 +93,14 @@ namespace SafeExamBrowser.UserInterface.Desktop
{
Dispatcher.Invoke(() =>
{
- Width = SystemParameters.WorkArea.Right;
- Left = SystemParameters.WorkArea.Right - Width;
- Top = SystemParameters.WorkArea.Bottom;
+ Width = SystemParameters.PrimaryScreenWidth;
+ Left = 0;
+ Top = SystemParameters.PrimaryScreenHeight - Height;
var position = this.TransformToPhysical(Left, Top);
var size = this.TransformToPhysical(Width, Height);
- logger.Info($"Set taskbar bounds to {Width}x{Height} at ({Left}/{Top}), in physical pixels: {size.X}x{size.Y} at ({position.X}/{position.Y}).");
+ logger.Debug($"Set taskbar bounds to {Width}x{Height} at ({Left}/{Top}), in physical pixels: {size.X}x{size.Y} at ({position.X}/{position.Y}).");
});
}
diff --git a/SafeExamBrowser.WindowsApi/NativeMethods.cs b/SafeExamBrowser.WindowsApi/NativeMethods.cs
index 5b65da41..eacdb8ac 100644
--- a/SafeExamBrowser.WindowsApi/NativeMethods.cs
+++ b/SafeExamBrowser.WindowsApi/NativeMethods.cs
@@ -359,7 +359,7 @@ namespace SafeExamBrowser.WindowsApi
public void SetWallpaper(string filePath)
{
- var success = User32.SystemParametersInfo(SPI.SETDESKWALLPAPER, 0, filePath, SPIF.UPDATEANDCHANGE);
+ var success = User32.SystemParametersInfo(SPI.SETDESKWALLPAPER, 0, filePath, SPIF.NONE);
if (!success)
{
@@ -370,7 +370,7 @@ namespace SafeExamBrowser.WindowsApi
public void SetWorkingArea(IBounds bounds)
{
var workingArea = new RECT { Left = bounds.Left, Top = bounds.Top, Right = bounds.Right, Bottom = bounds.Bottom };
- var success = User32.SystemParametersInfo(SPI.SETWORKAREA, 0, ref workingArea, SPIF.UPDATEINIFILE);
+ var success = User32.SystemParametersInfo(SPI.SETWORKAREA, 0, ref workingArea, SPIF.NONE);
if (!success)
{