How to detect fullscreen application? |
Author: |
Message: |
V@no
Full Member
sexy
Posts: 162
Joined: Mar 2004
|
O.P. How to detect fullscreen application?
Hello!
WLM by itself has compatibility to detect fullscreen application. Can we use that feature in our scripts?
Or is there another way detect it?
So far I could only find Detect Full Screen application topic, I've tried proposed code but it fails: when WMP is in fullscreen, it fails at GetWindowRect check, on PotPlayer it fails at IsIconic.
The code:
js code: // Check if full screen app is running
function IsFullScreenAppRunning ()
{
var hWnd = Interop.Call('user32', 'GetForegroundWindow');
if(!hWnd)
{
Debug.Trace(1);
return false;
}
if(!Interop.Call('user32', 'IsWindowVisible', hWnd) || Interop.Call('user32', 'IsIconic', hWnd) || !Interop.Call('user32', 'IsZoomed', hWnd))
{
Debug.Trace(2 + " | " + Interop.Call('user32', 'IsWindowVisible', hWnd) + " | " +Interop.Call('user32', 'IsIconic', hWnd) + " | " +Interop.Call('user32', 'IsZoomed', hWnd));
return false;
}
var rc;
if(!Interop.Call('user32', 'GetWindowRect', hWnd, rc))
{
Debug.Trace(3);
return false;
}
Debug.Trace(4 + " | " + rc.right + " | " + rc.left + " | " + Interop.Call('user32', 'GetSystemMetrics', SM_CXSCREEN));
return (rc.right - rc.left >= Interop.Call('user32', 'GetSystemMetrics', SM_CXSCREEN) && rc.bottom - rc.top >= Interop.Call('user32', 'GetSystemMetrics', SM_CYSCREEN));
}
Any help would be appreciated.
Thank you.
|
|
11-28-2010 05:25 PM |
|
|
Matti
Elite Member
Script Developer and Helper
Posts: 1646 Reputation: 39
32 / /
Joined: Apr 2004
|
RE: How to detect fullscreen application?
Your conversion from C++ is faulty. There are no structure types (RECT) or pass-by-reference operators in JScript. Also, you can't access structure members using "rc.left" or "rc.top". I suggest you learn more about Interop and DataBloc before attempting to do such conversions.
Anyway, to get you started, I tried to convert the snippet from that thread to JScript. I didn't test whether this actually works, but it shows the principles. Have a go with it and see if you can work out the rest.
js code: var SM_CXSCREEN = 0;
var SM_CYSCREEN = 1;
function IsFullScreenAppRunning() {
var hWnd = Interop.Call('user32', 'GetForegroundWindow');
if(!hWnd)
return false;
if(!Interop.Call('user32', 'IsWindowVisible', hWnd) || Interop.Call('user32', 'IsIconic', hWnd) || !Interop.Call('user32', 'IsZoomed', hWnd))
return false;
var rc = Interop.Allocate(16);
if(!Interop.Call('user32', 'GetWindowRect', hWnd, rc))
return false;
var width = rc.ReadDWORD(8) - rc.ReadDWORD(0);
var height = rc.ReadDWORD(12) - rc.ReadDWORD(4);
return (width >= Interop.Call('user32', 'GetSystemMetrics', SM_CXSCREEN) && height >= Interop.Call('user32', 'GetSystemMetrics', SM_CYSCREEN));
}
|
|
11-28-2010 06:13 PM |
|
|
V@no
Full Member
sexy
Posts: 162
Joined: Mar 2004
|
O.P. RE: RE: How to detect fullscreen application?
Thank you.
The code some-what working, but not with every fullscreen applications. For example in some cases it still fails recognize WMP (Windows Media Player) or firefox (via F11 key), but it works fine on PotP...
P.S.
In code from the original topic seems to be bad logic when checking if window is maximized. Instead of
js code: if(!Interop.Call('user32', 'IsWindowVisible', hWnd) || Interop.Call('user32', 'IsIconic', hWnd) || !Interop.Call('user32', 'IsZoomed', hWnd))
it should be:
js code: if(!Interop.Call('user32', 'IsWindowVisible', hWnd) || Interop.Call('user32', 'IsIconic', hWnd) || Interop.Call('user32', 'IsZoomed', hWnd))
|
|
11-28-2010 08:18 PM |
|
|
Matti
Elite Member
Script Developer and Helper
Posts: 1646 Reputation: 39
32 / /
Joined: Apr 2004
|
RE: How to detect fullscreen application?
As I said, I literally converted what was in that post to JScript. I'll let you play with it and see if you can get it working the way you want.
|
|
11-28-2010 08:52 PM |
|
|
|
|