Implement version fetching for Windows
This commit is contained in:
@@ -4,6 +4,7 @@
|
|||||||
#include <Windows.h>
|
#include <Windows.h>
|
||||||
#include <SFML/Graphics/RenderWindow.hpp>
|
#include <SFML/Graphics/RenderWindow.hpp>
|
||||||
#include <SFML/Graphics/Image.hpp>
|
#include <SFML/Graphics/Image.hpp>
|
||||||
|
#include <sstream>
|
||||||
|
|
||||||
extern sf::RenderWindow mainPtr;
|
extern sf::RenderWindow mainPtr;
|
||||||
OPENFILENAMEA getParty, getScen, getRsrc, putParty, putScen, putRsrc;
|
OPENFILENAMEA getParty, getScen, getRsrc, putParty, putScen, putRsrc;
|
||||||
@@ -86,6 +87,78 @@ char keyToChar(sf::Keyboard::Key key, bool isShift) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::string get_os_version() {
|
||||||
|
// Copied and tweaked from Battle for Wesnoth
|
||||||
|
static const std::string base = "Microsoft Windows";
|
||||||
|
|
||||||
|
OSVERSIONINFOEXA v;
|
||||||
|
v.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA);
|
||||||
|
|
||||||
|
if(!GetVersionEx(reinterpret_cast<OSVERSIONINFO*>(&v))) {
|
||||||
|
return base;
|
||||||
|
}
|
||||||
|
|
||||||
|
const DWORD vnum = v.dwMajorVersion * 100 + v.dwMinorVersion;
|
||||||
|
std::ostringstream version;
|
||||||
|
version << base << ' ';
|
||||||
|
|
||||||
|
switch(vnum) {
|
||||||
|
case 500:
|
||||||
|
version << "2000";
|
||||||
|
break;
|
||||||
|
case 501:
|
||||||
|
version << "XP";
|
||||||
|
break;
|
||||||
|
case 502:
|
||||||
|
// This will misidentify XP x64 but who really cares?
|
||||||
|
version << "Server 2003";
|
||||||
|
break;
|
||||||
|
case 600:
|
||||||
|
if(v.wProductType == VER_NT_WORKSTATION) {
|
||||||
|
version << "Vista";
|
||||||
|
} else {
|
||||||
|
version << "Server 2008";
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 601:
|
||||||
|
if(v.wProductType == VER_NT_WORKSTATION) {
|
||||||
|
version << "7";
|
||||||
|
} else {
|
||||||
|
version << "Server 2008 R2";
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 602:
|
||||||
|
if(v.wProductType == VER_NT_WORKSTATION) {
|
||||||
|
version << "8";
|
||||||
|
} else {
|
||||||
|
version << "Server 2012";
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 603:
|
||||||
|
if(v.wProductType == VER_NT_WORKSTATION) {
|
||||||
|
version << "8.1";
|
||||||
|
} else {
|
||||||
|
version << "Server 2012 R2";
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 1000:
|
||||||
|
if(v.wProductType == VER_NT_WORKSTATION) {
|
||||||
|
version << "10";
|
||||||
|
break;
|
||||||
|
} // else fallback to default
|
||||||
|
default:
|
||||||
|
if(v.wProductType != VER_NT_WORKSTATION) {
|
||||||
|
version << "Server";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(v.szCSDVersion && *v.szCSDVersion) {
|
||||||
|
version << ' ' << v.szCSDVersion;
|
||||||
|
}
|
||||||
|
|
||||||
|
return version.str();
|
||||||
|
}
|
||||||
|
|
||||||
void makeFrontWindow(sf::Window& win) {
|
void makeFrontWindow(sf::Window& win) {
|
||||||
HWND win_handle = win.getSystemHandle();
|
HWND win_handle = win.getSystemHandle();
|
||||||
BringWindowToTop(win_handle);
|
BringWindowToTop(win_handle);
|
||||||
|
|||||||
Reference in New Issue
Block a user