TTKMusicPlayer  4.2.0.0
TTKMusicPlayer imitates Kugou UI, the music player uses of qmmp core library based on Qt for windows and linux
ttkplatformsystem.cpp
Go to the documentation of this file.
1 #include "ttkplatformsystem.h"
2 
3 #ifdef Q_OS_WIN
4 # define WIN32_LEAN_AND_MEAN
5 # include <qt_windows.h>
6 #elif defined Q_OS_LINUX
7 # include <QFile>
8 # include <QRegExp>
9 #endif
10 
12 {
13 #ifdef Q_OS_WIN
14  typedef void (__stdcall *NTPROC)(DWORD*, DWORD*, DWORD*);
15  HINSTANCE instance = LoadLibraryA("ntdll.dll");
16  DWORD major, minor, buildNumber;
17  NTPROC proc = TTKVoidCast(NTPROC)GetProcAddress(instance, "RtlGetNtVersionNumbers");
18  proc(&major, &minor, &buildNumber);
19 
20  if(major == 6 && minor == 1) //win 7
21  {
22  return System::Win7;
23  }
24  else if(major == 6 && minor == 2) //win 8
25  {
26  return System::Win8;
27  }
28  else if(major == 6 && minor == 3) //win 8.1
29  {
30  return System::Win81;
31  }
32  else if(major == 10 && minor == 0) //win 10 or win 11
33  {
34  return buildNumber < (0xF0000000 | 22000) ? System::Win10 : System::Win11;
35  }
36  FreeLibrary(instance);
37 
38  SYSTEM_INFO info;
39  GetSystemInfo(&info);
40 
41  OSVERSIONINFOEX os;
42  os.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
43  if(GetVersionEx((OSVERSIONINFO *)&os))
44  {
45  switch(os.dwMajorVersion)
46  {
47  case 4:
48  switch(os.dwMinorVersion)
49  {
50  case 0:
51  if(os.dwPlatformId == VER_PLATFORM_WIN32_NT)
52  {
53  return System::WinNT40;
54  }
55  else if(os.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS)
56  {
57  return System::Win95;
58  }
59  break;
60  case 10: return System::Win98;
61  case 90: return System::WinMe;
62  default: break;
63  }
64  break;
65  case 5:
66  switch(os.dwMinorVersion)
67  {
68  case 0: return System::Win2000;
69  case 1: return System::WinXP;
70  case 2:
71  if(os.wProductType == VER_NT_WORKSTATION && info.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64)
72  {
74  }
75  else if(GetSystemMetrics(SM_SERVERR2) == 0)
76  {
77  return System::WinServer2003;
78  }
79  else if(GetSystemMetrics(SM_SERVERR2) != 0)
80  {
82  }
83  default: break;
84  }
85  break;
86  case 6:
87  switch(os.dwMinorVersion)
88  {
89  case 0: return os.wProductType == VER_NT_WORKSTATION ? System::WinVista : System::WinServer2008;
90  case 1: return os.wProductType == VER_NT_WORKSTATION ? System::Win7 : System::WinServer2008R2;
91  case 2: return os.wProductType == VER_NT_WORKSTATION ? System::Win8 : System::WinServer2012;
92  default: break;
93  }
94  break;
95  default: return System::Unkown;
96  }
97  }
98 #elif defined Q_OS_LINUX
99  QFile file("/etc/lsb-release");
100  if(file.open(QIODevice::ReadOnly))
101  {
102  const QRegExp regx("DISTRIB_ID=(\\w+)");
103  if(regx.indexIn(QString(file.readAll())) != -1)
104  {
105  const QString &system = regx.cap(1).toLower();
106 
107  if(system == "ubuntu")
108  {
109  return System::LinuxUbuntu;
110  }
111  else if(system == "debian")
112  {
113  return System::LinuxDebian;
114  }
115  else if(system == "arch")
116  {
117  return System::LinuxArch;
118  }
119  else if(system == "centos")
120  {
121  return System::LinuxCentOS;
122  }
123  }
124  file.close();
125  }
126  return System::Linux;
127 #elif defined Q_OS_MAC
128  return System::Mac;
129 #endif
130  return System::Unkown;
131 }
#define TTKVoidCast(x)
Definition: ttkqtglobal.h:88
static System systemName()