X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/14d63513822a9a91697508ecd37f95bac8af662e..c1baf4b58b05f9bc10fe4d84b038de6583617e8b:/src/msw/utils.cpp diff --git a/src/msw/utils.cpp b/src/msw/utils.cpp index fb792f42b3..612ced86ae 100644 --- a/src/msw/utils.cpp +++ b/src/msw/utils.cpp @@ -55,7 +55,7 @@ #include #endif -#if !defined(__GNUWIN32__) && !defined(__SALFORDC__) && !defined(__WXMICROWIN__) && !defined(__WXWINCE__) +#if !defined(__GNUWIN32__) && !defined(__WXMICROWIN__) && !defined(__WXWINCE__) #include #ifndef __MWERKS__ @@ -608,7 +608,7 @@ bool wxGetEnv(const wxString& WXUNUSED_IN_WINCE(var), return false; #else // Win32 // first get the size of the buffer - DWORD dwRet = ::GetEnvironmentVariable(var.wx_str(), NULL, 0); + DWORD dwRet = ::GetEnvironmentVariable(var.t_str(), NULL, 0); if ( !dwRet ) { // this means that there is no such variable @@ -617,7 +617,7 @@ bool wxGetEnv(const wxString& WXUNUSED_IN_WINCE(var), if ( value ) { - (void)::GetEnvironmentVariable(var.wx_str(), + (void)::GetEnvironmentVariable(var.t_str(), wxStringBuffer(*value, dwRet), dwRet); } @@ -635,7 +635,7 @@ bool wxDoSetEnv(const wxString& WXUNUSED_IN_WINCE(var), // no environment variables under CE return false; #else - if ( !::SetEnvironmentVariable(var.wx_str(), value) ) + if ( !::SetEnvironmentVariable(var.t_str(), value) ) { wxLogLastError(_T("SetEnvironmentVariable")); @@ -648,7 +648,7 @@ bool wxDoSetEnv(const wxString& WXUNUSED_IN_WINCE(var), bool wxSetEnv(const wxString& variable, const wxString& value) { - return wxDoSetEnv(variable, value.wx_str()); + return wxDoSetEnv(variable, value.t_str()); } bool wxUnsetEnv(const wxString& variable) @@ -953,7 +953,7 @@ bool wxShell(const wxString& command) } // Shutdown or reboot the PC -bool wxShutdown(wxShutdownFlags WXUNUSED_IN_WINCE(wFlags)) +bool wxShutdown(int WXUNUSED_IN_WINCE(flags)) { #ifdef __WXWINCE__ // TODO-CE @@ -990,15 +990,25 @@ bool wxShutdown(wxShutdownFlags WXUNUSED_IN_WINCE(wFlags)) if ( bOK ) { - UINT flags = EWX_SHUTDOWN | EWX_FORCE; - switch ( wFlags ) + UINT wFlags = 0; + if ( flags & wxSHUTDOWN_FORCE ) + { + wFlags = EWX_FORCE; + flags &= ~wxSHUTDOWN_FORCE; + } + + switch ( flags ) { case wxSHUTDOWN_POWEROFF: - flags |= EWX_POWEROFF; + wFlags |= EWX_POWEROFF; break; case wxSHUTDOWN_REBOOT: - flags |= EWX_REBOOT; + wFlags |= EWX_REBOOT; + break; + + case wxSHUTDOWN_LOGOFF: + wFlags |= EWX_LOGOFF; break; default: @@ -1006,11 +1016,11 @@ bool wxShutdown(wxShutdownFlags WXUNUSED_IN_WINCE(wFlags)) return false; } - bOK = ::ExitWindowsEx(flags, 0) != 0; + bOK = ::ExitWindowsEx(wFlags, 0) != 0; } return bOK; -#endif // Win32/16 +#endif // WinCE/!WinCE } // ---------------------------------------------------------------------------- @@ -1067,6 +1077,41 @@ bool wxIsDebuggerRunning() // OS version // ---------------------------------------------------------------------------- +// check if we're running under a server or workstation Windows system: it +// returns true or false with obvious meaning as well as -1 if the system type +// couldn't be determined +// +// this function is currently private but we may want to expose it later if +// it's really useful +namespace +{ + +int wxIsWindowsServer() +{ +#ifdef VER_NT_WORKSTATION + OSVERSIONINFOEX info; + wxZeroMemory(info); + + info.dwOSVersionInfoSize = sizeof(info); + if ( ::GetVersionEx(wx_reinterpret_cast(OSVERSIONINFO *, &info)) ) + { + switch ( info.wProductType ) + { + case VER_NT_WORKSTATION: + return false; + + case VER_NT_SERVER: + case VER_NT_DOMAIN_CONTROLLER: + return true; + } + } +#endif // VER_NT_WORKSTATION + + return -1; +} + +} // anonymous namespace + wxString wxGetOsDescription() { wxString str; @@ -1131,24 +1176,44 @@ wxString wxGetOsDescription() break; case VER_PLATFORM_WIN32_NT: - if ( info.dwMajorVersion == 5 ) + switch ( info.dwMajorVersion ) { - switch ( info.dwMinorVersion ) - { - case 0: - str.Printf(_("Windows 2000 (build %lu"), - info.dwBuildNumber); - break; - case 1: - str.Printf(_("Windows XP (build %lu"), - info.dwBuildNumber); - break; - case 2: - str.Printf(_("Windows Server 2003 (build %lu"), + case 5: + switch ( info.dwMinorVersion ) + { + case 0: + str.Printf(_("Windows 2000 (build %lu"), + info.dwBuildNumber); + break; + + case 2: + // we can't distinguish between XP 64 and 2003 + // as they both are 5.2, so examine the product + // type to resolve this ambiguity + if ( wxIsWindowsServer() == 1 ) + { + str.Printf(_("Windows Server 2003 (build %lu"), + info.dwBuildNumber); + break; + } + //else: must be XP, fall through + + case 1: + str.Printf(_("Windows XP (build %lu"), + info.dwBuildNumber); + break; + } + break; + + case 6: + if ( info.dwMinorVersion == 0 ) + { + str.Printf(_("Windows Vista (build %lu"), info.dwBuildNumber); - break; - } + } + break; } + if ( str.empty() ) { str.Printf(_("Windows NT %lu.%lu (build %lu"), @@ -1156,11 +1221,15 @@ wxString wxGetOsDescription() info.dwMinorVersion, info.dwBuildNumber); } + if ( !wxIsEmpty(info.szCSDVersion) ) { str << _T(", ") << info.szCSDVersion; } str << _T(')'); + + if ( wxIsPlatform64Bit() ) + str << _(", 64-bit edition"); break; } }