diff options
Diffstat (limited to 'src/mir_core')
-rw-r--r-- | src/mir_core/mir_core.def | 5 | ||||
-rw-r--r-- | src/mir_core/winver.cpp | 55 |
2 files changed, 60 insertions, 0 deletions
diff --git a/src/mir_core/mir_core.def b/src/mir_core/mir_core.def index bfd34cb47d..add3c18cf3 100644 --- a/src/mir_core/mir_core.def +++ b/src/mir_core/mir_core.def @@ -238,3 +238,8 @@ mirstr_getNil @235 mirstr_lock @236
mirstr_release @237
mirstr_unlock @238
+IsWinVerVistaPlus @239
+IsWinVer7Plus @240
+IsFullScreen @241
+IsWorkstationLocked @242
+IsScreenSaverRunning @243
diff --git a/src/mir_core/winver.cpp b/src/mir_core/winver.cpp index b980d5138e..03a6e62a28 100644 --- a/src/mir_core/winver.cpp +++ b/src/mir_core/winver.cpp @@ -34,3 +34,58 @@ MIR_CORE_DLL(BOOL) IsWinVer7Plus() {
return dwWinVer >= _WIN32_WINNT_WIN7;
}
+
+MIR_CORE_DLL(BOOL) IsFullScreen()
+{
+ RECT rcScreen = {0};
+
+ rcScreen.right = GetSystemMetrics(SM_CXSCREEN);
+ rcScreen.bottom = GetSystemMetrics(SM_CYSCREEN);
+
+ HMONITOR hMon = MonitorFromWindow(GetForegroundWindow(), MONITOR_DEFAULTTONEAREST);
+ MONITORINFO mi;
+ mi.cbSize = sizeof(mi);
+ if (GetMonitorInfo(hMon, &mi))
+ rcScreen = mi.rcMonitor;
+
+ HWND hWndDesktop = GetDesktopWindow();
+ HWND hWndShell = GetShellWindow();
+
+ // check foregroundwindow
+ HWND hWnd = GetForegroundWindow();
+ if (hWnd && hWnd != hWndDesktop && hWnd != hWndShell) {
+ TCHAR tszClassName[128] = _T("");
+ GetClassName(hWnd, tszClassName, SIZEOF(tszClassName));
+ if ( _tcscmp(tszClassName, _T("WorkerW"))) {
+ RECT rect, rectw, recti;
+ GetWindowRect(hWnd, &rectw);
+
+ GetClientRect(hWnd, &rect);
+ ClientToScreen(hWnd, (LPPOINT)&rect);
+ ClientToScreen(hWnd, (LPPOINT)&rect.right);
+
+ if (EqualRect(&rect, &rectw) && IntersectRect(&recti, &rect, &rcScreen) &&
+ EqualRect(&recti, &rcScreen))
+ return true;
+ }
+ }
+
+ return false;
+}
+
+MIR_CORE_DLL(BOOL) IsWorkstationLocked(void)
+{
+ HDESK hDesk = OpenInputDesktop(0, FALSE, DESKTOP_SWITCHDESKTOP);
+ if (hDesk == NULL)
+ return true;
+
+ CloseDesktop(hDesk);
+ return false;
+}
+
+MIR_CORE_DLL(BOOL) IsScreenSaverRunning(void)
+{
+ BOOL rc = FALSE;
+ SystemParametersInfo(SPI_GETSCREENSAVERRUNNING, 0, &rc, FALSE);
+ return rc != 0;
+}
|