I have a recording program that stays TopMost
all the time except when I open a Modern app (Windows 8)
or the Start Screen
.
It is possible to make a desktop application stay on top of modern apps, like the Magnifying Glass
tool:
Now, the problem is that using the TopMost option and/or the API call in a WPF window won't work with modern apps.
What I'm trying:
static readonly IntPtr HWND_TOPMOST = new IntPtr(-1);
static readonly IntPtr HWND_NOTOPMOST = new IntPtr(-2);
static readonly IntPtr HWND_TOP = new IntPtr(0);
static readonly IntPtr HWND_BOTTOM = new IntPtr(1);
const UInt32 SWP_NOSIZE = 0x0001;
const UInt32 SWP_NOMOVE = 0x0002;
const UInt32 TOPMOST_FLAGS = SWP_NOMOVE | SWP_NOSIZE;
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags);
//OnLoaded event handler:
var source = PresentationSource.FromVisual(this) as HwndSource;
SetWindowPos(source.Handle, HWND_TOPMOST, 0, 0, 0, 0, TOPMOST_FLAGS);
Only applications marked as Accessibility related can do this. To achieve it, follow these guidelines (taken from the comments section of this article):
... Not really a trivial task!