mirror of
https://github.com/microsoft/PowerToys
synced 2024-11-22 17:09:28 +00: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:
parent
6522079736
commit
0be120d293
@ -69,6 +69,9 @@ namespace PowerLauncher.Helper
|
||||
[DllImport("user32.DLL", CharSet = CharSet.Unicode)]
|
||||
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)
|
||||
{
|
||||
IntPtr argv = IntPtr.Zero;
|
||||
@ -242,4 +245,15 @@ namespace PowerLauncher.Helper
|
||||
TRAYMOUSEMESSAGE = 0x800, // WM_USER + 1024
|
||||
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()
|
||||
{
|
||||
// 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
|
||||
IntPtr hWnd = NativeMethods.GetForegroundWindow();
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user