diff options
| author | Hein-Pieter van Braam | 2018-01-29 16:46:30 +0100 |
|---|---|---|
| committer | Hein-Pieter van Braam | 2018-01-29 16:50:49 +0100 |
| commit | b4d369c887001a824a4f27e59e3e300c8d4a5bb7 (patch) | |
| tree | 0b9d817abed5a31120513d190b8743f68250d7c0 /platform/windows/os_windows.cpp | |
| parent | 4caadae0f15d658d464d125829039a2e35c68124 (diff) | |
| download | godot-b4d369c887001a824a4f27e59e3e300c8d4a5bb7.tar.gz godot-b4d369c887001a824a4f27e59e3e300c8d4a5bb7.tar.zst godot-b4d369c887001a824a4f27e59e3e300c8d4a5bb7.zip | |
Diffstat (limited to 'platform/windows/os_windows.cpp')
| -rw-r--r-- | platform/windows/os_windows.cpp | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/platform/windows/os_windows.cpp b/platform/windows/os_windows.cpp index 43f2a5cf7..a2a51f10a 100644 --- a/platform/windows/os_windows.cpp +++ b/platform/windows/os_windows.cpp @@ -2211,6 +2211,36 @@ String OS_Windows::get_locale() const { return "en"; } +// We need this because GetSystemInfo() is unreliable on WOW64 +// see https://msdn.microsoft.com/en-us/library/windows/desktop/ms724381(v=vs.85).aspx +// Taken from MSDN +typedef BOOL(WINAPI *LPFN_ISWOW64PROCESS)(HANDLE, PBOOL); +LPFN_ISWOW64PROCESS fnIsWow64Process; + +BOOL is_wow64() { + BOOL wow64 = FALSE; + + fnIsWow64Process = (LPFN_ISWOW64PROCESS)GetProcAddress(GetModuleHandle(TEXT("kernel32")), "IsWow64Process"); + + if (fnIsWow64Process) { + if (!fnIsWow64Process(GetCurrentProcess(), &wow64)) { + wow64 = FALSE; + } + } + + return wow64; +} + +int OS_Windows::get_processor_count() const { + SYSTEM_INFO sysinfo; + if (is_wow64()) + GetNativeSystemInfo(&sysinfo); + else + GetSystemInfo(&sysinfo); + + return sysinfo.dwNumberOfProcessors; +} + OS::LatinKeyboardVariant OS_Windows::get_latin_keyboard_variant() const { unsigned long azerty[] = { |
