// Some interop code taken from Mike Marshall's AnyForm using System.Drawing; namespace Hardcodet.Wpf.TaskbarNotification.Interop { /// /// Resolves the current tray position. /// public static class TrayInfo { /// /// Gets the position of the system tray. /// /// Tray coordinates. public static Point GetTrayLocation() { int space = 2; var info = new AppBarInfo(); info.GetSystemTaskBarPosition(); Rectangle rcWorkArea = info.WorkArea; int x = 0, y = 0; switch (info.Edge) { case AppBarInfo.ScreenEdge.Left: x = rcWorkArea.Right + space; y = rcWorkArea.Bottom; break; case AppBarInfo.ScreenEdge.Bottom: x = rcWorkArea.Right; y = rcWorkArea.Bottom - rcWorkArea.Height - space; break; case AppBarInfo.ScreenEdge.Top: x = rcWorkArea.Right; y = rcWorkArea.Top + rcWorkArea.Height + space; break; case AppBarInfo.ScreenEdge.Right: x = rcWorkArea.Right - rcWorkArea.Width - space; y = rcWorkArea.Bottom; break; } return GetDeviceCoordinates(new Point {X = x, Y = y}); } /// /// Recalculates OS coordinates in order to support WPFs coordinate /// system if OS scaling (DPIs) is not 100%. /// /// Point /// Point public static Point GetDeviceCoordinates(Point point) { return new Point { X = (int)(point.X / SystemInfo.DpiFactorX), Y = (int)(point.Y / SystemInfo.DpiFactorY) }; } } }