mirror of
https://github.com/microsoft/PowerToys.git
synced 2025-12-16 11:48:06 +01:00
[PTRun]Detect full-screen games with QUNS_RUNNING_D3D_FULL_SCREEN (#30797)
* Add SHQueryUserNotificationState to NativeMethods * Check for QUNS_RUNNING_D3D_FULL_SCREEN in IsWindowFullscreen The current test for whether a window is full-screen (i.e. a movie or a game) is a bit of a heuristic. In certain cases however, we can *know* that a window is full-screen. Check that case first, then proceed with the existing logic * Make spellchecker happier
This commit is contained in:
@@ -69,6 +69,9 @@ namespace PowerLauncher.Helper
|
|||||||
[DllImport("user32.DLL", CharSet = CharSet.Unicode)]
|
[DllImport("user32.DLL", CharSet = CharSet.Unicode)]
|
||||||
internal static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);
|
internal static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);
|
||||||
|
|
||||||
|
[DllImport("shell32.dll")]
|
||||||
|
public static extern int SHQueryUserNotificationState(out UserNotificationState state);
|
||||||
|
|
||||||
public static string[] CommandLineToArgvW(string cmdLine)
|
public static string[] CommandLineToArgvW(string cmdLine)
|
||||||
{
|
{
|
||||||
IntPtr argv = IntPtr.Zero;
|
IntPtr argv = IntPtr.Zero;
|
||||||
@@ -242,4 +245,15 @@ namespace PowerLauncher.Helper
|
|||||||
TRAYMOUSEMESSAGE = 0x800, // WM_USER + 1024
|
TRAYMOUSEMESSAGE = 0x800, // WM_USER + 1024
|
||||||
APP = 0x8000,
|
APP = 0x8000,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal enum UserNotificationState : int
|
||||||
|
{
|
||||||
|
QUNS_NOT_PRESENT = 1,
|
||||||
|
QUNS_BUSY,
|
||||||
|
QUNS_RUNNING_D3D_FULL_SCREEN,
|
||||||
|
QUNS_PRESENTATION_MODE,
|
||||||
|
QUNS_ACCEPTS_NOTIFICATIONS,
|
||||||
|
QUNS_QUIET_TIME,
|
||||||
|
QUNS_APP,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -112,6 +112,15 @@ namespace PowerLauncher.Helper
|
|||||||
|
|
||||||
public static bool IsWindowFullscreen()
|
public static bool IsWindowFullscreen()
|
||||||
{
|
{
|
||||||
|
// First, check to see if a game is fullscreen, if so, we definitely have
|
||||||
|
// a full-screen window
|
||||||
|
UserNotificationState state;
|
||||||
|
if (Marshal.GetExceptionForHR(NativeMethods.SHQueryUserNotificationState(out state)) == null &&
|
||||||
|
state == UserNotificationState.QUNS_RUNNING_D3D_FULL_SCREEN)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
// get current active window
|
// get current active window
|
||||||
IntPtr hWnd = NativeMethods.GetForegroundWindow();
|
IntPtr hWnd = NativeMethods.GetForegroundWindow();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user