mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
130 lines
2.4 KiB
C++
130 lines
2.4 KiB
C++
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
#ifndef nsWindowsHelpers_h
|
|
#define nsWindowsHelpers_h
|
|
|
|
#include <windows.h>
|
|
#include "nsAutoRef.h"
|
|
#include "nscore.h"
|
|
|
|
template<>
|
|
class nsAutoRefTraits<HKEY>
|
|
{
|
|
public:
|
|
typedef HKEY RawRef;
|
|
static HKEY Void()
|
|
{
|
|
return NULL;
|
|
}
|
|
|
|
static void Release(RawRef aFD)
|
|
{
|
|
if (aFD != Void()) {
|
|
RegCloseKey(aFD);
|
|
}
|
|
}
|
|
};
|
|
|
|
template<>
|
|
class nsAutoRefTraits<SC_HANDLE>
|
|
{
|
|
public:
|
|
typedef SC_HANDLE RawRef;
|
|
static SC_HANDLE Void()
|
|
{
|
|
return NULL;
|
|
}
|
|
|
|
static void Release(RawRef aFD)
|
|
{
|
|
if (aFD != Void()) {
|
|
CloseServiceHandle(aFD);
|
|
}
|
|
}
|
|
};
|
|
|
|
template<>
|
|
class nsSimpleRef<HANDLE>
|
|
{
|
|
protected:
|
|
typedef HANDLE RawRef;
|
|
|
|
nsSimpleRef() : mRawRef(NULL)
|
|
{
|
|
}
|
|
|
|
nsSimpleRef(RawRef aRawRef) : mRawRef(aRawRef)
|
|
{
|
|
}
|
|
|
|
bool HaveResource() const
|
|
{
|
|
return mRawRef != NULL && mRawRef != INVALID_HANDLE_VALUE;
|
|
}
|
|
|
|
public:
|
|
RawRef get() const
|
|
{
|
|
return mRawRef;
|
|
}
|
|
|
|
static void Release(RawRef aRawRef)
|
|
{
|
|
if (aRawRef != NULL && aRawRef != INVALID_HANDLE_VALUE) {
|
|
CloseHandle(aRawRef);
|
|
}
|
|
}
|
|
RawRef mRawRef;
|
|
};
|
|
|
|
typedef nsAutoRef<HKEY> nsAutoRegKey;
|
|
typedef nsAutoRef<SC_HANDLE> nsAutoServiceHandle;
|
|
typedef nsAutoRef<HANDLE> nsAutoHandle;
|
|
|
|
namespace
|
|
{
|
|
bool
|
|
IsVistaOrLater()
|
|
{
|
|
OSVERSIONINFO info;
|
|
ZeroMemory(&info, sizeof(OSVERSIONINFO));
|
|
info.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
|
|
GetVersionEx(&info);
|
|
return info.dwMajorVersion >= 6;
|
|
}
|
|
|
|
bool
|
|
IsRunningInWindowsMetro()
|
|
{
|
|
static bool alreadyChecked = false;
|
|
static bool isMetro = false;
|
|
if (alreadyChecked) {
|
|
return isMetro;
|
|
}
|
|
|
|
HMODULE user32DLL = LoadLibraryW(L"user32.dll");
|
|
if (!user32DLL) {
|
|
return false;
|
|
}
|
|
|
|
typedef BOOL (WINAPI* IsImmersiveProcessFunc)(HANDLE process);
|
|
IsImmersiveProcessFunc IsImmersiveProcessPtr =
|
|
(IsImmersiveProcessFunc)GetProcAddress(user32DLL,
|
|
"IsImmersiveProcess");
|
|
FreeLibrary(user32DLL);
|
|
if (!IsImmersiveProcessPtr) {
|
|
// isMetro is already set to false.
|
|
alreadyChecked = true;
|
|
return false;
|
|
}
|
|
|
|
isMetro = IsImmersiveProcessPtr(GetCurrentProcess());
|
|
alreadyChecked = true;
|
|
return isMetro;
|
|
}
|
|
}
|
|
|
|
#endif
|