+std::string get_sysinfo()
+{
+#ifdef _WIN32
+ OSVERSIONINFO osvi;
+ std::ostringstream oss;
+ std::string tmp;
+ ZeroMemory(&osvi, sizeof(OSVERSIONINFO));
+ osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
+ GetVersionEx(&osvi);
+ tmp = osvi.szCSDVersion;
+ std::replace(tmp.begin(), tmp.end(), ' ', '_');
+
+ oss << "Windows/" << osvi.dwMajorVersion << "."
+ << osvi.dwMinorVersion;
+ if(osvi.szCSDVersion[0])
+ oss << "-" << tmp;
+ oss << " ";
+ #ifdef _WIN64
+ oss << "x86_64";
+ #else
+ BOOL is64 = FALSE;
+ if(IsWow64Process(GetCurrentProcess(), &is64) && is64)
+ oss << "x86_64"; // 32-bit app on 64-bit OS
+ else
+ oss << "x86";
+ #endif
+
+ return oss.str();
+#else
+ struct utsname osinfo;
+ uname(&osinfo);
+ return std::string(osinfo.sysname) + "/"
+ + osinfo.release + " " + osinfo.machine;
+#endif
+}
+