File indexing completed on 2024-06-16 04:15:42
0001 /* This file is part of the KDE project 0002 SPDX-FileCopyrightText: 1999 David Faure <faure@kde.org> 0003 SPDX-FileCopyrightText: 2014 Alex Richardson <arichardson.kde@gmail.com> 0004 0005 SPDX-License-Identifier: LGPL-2.0-or-later 0006 */ 0007 #ifndef SYSTEMINFORMATION_P_H 0008 #define SYSTEMINFORMATION_P_H 0009 0010 #include <QString> 0011 0012 namespace SystemInformation { 0013 QString userName(); 0014 QString operatingSystemVersion(); 0015 } 0016 0017 #if !defined(Q_OS_WIN) 0018 #include <pwd.h> 0019 #include <unistd.h> 0020 #include <sys/utsname.h> 0021 inline QString SystemInformation::userName() 0022 { 0023 struct passwd *p = getpwuid(getuid()); 0024 return QString::fromLatin1(p->pw_name); 0025 } 0026 0027 inline QString SystemInformation::operatingSystemVersion() 0028 { 0029 struct utsname unameBuf; 0030 uname(&unameBuf); 0031 return QString::fromUtf8(unameBuf.sysname) + 0032 QStringLiteral(" (") + QString::fromUtf8(unameBuf.machine) + QLatin1String(") ") + 0033 QStringLiteral("release ") + QString::fromUtf8(unameBuf.release); 0034 } 0035 #else 0036 #include <QSysInfo> 0037 #include <qt_windows.h> 0038 #define SECURITY_WIN32 0039 #include <security.h> 0040 //#include <secext.h> // GetUserNameEx 0041 0042 inline QString SystemInformation::userName() 0043 { 0044 WCHAR nameBuffer[256]; 0045 DWORD bufsize = 256; 0046 if (!GetUserNameExW(NameDisplay, nameBuffer, &bufsize)) { 0047 return QStringLiteral("Unknown User"); //should never happen (translate?) 0048 } 0049 return QString::fromWCharArray(nameBuffer); 0050 } 0051 0052 static inline QString windowsVersionString() { 0053 QString productVersion = QSysInfo::productVersion(); 0054 if (productVersion == "unknown") return QStringLiteral("Unknown Windows"); 0055 return "Windows " + productVersion; 0056 } 0057 0058 inline QString SystemInformation::operatingSystemVersion() 0059 { 0060 SYSTEM_INFO info; 0061 GetNativeSystemInfo(&info); 0062 QString arch; 0063 switch (info.wProcessorArchitecture) { 0064 case PROCESSOR_ARCHITECTURE_AMD64: 0065 case PROCESSOR_ARCHITECTURE_IA32_ON_WIN64: 0066 arch = QStringLiteral(" (x86_64)"); 0067 break; 0068 case PROCESSOR_ARCHITECTURE_INTEL: 0069 arch = QStringLiteral(" (x86)"); 0070 break; 0071 case PROCESSOR_ARCHITECTURE_ARM: 0072 arch = QStringLiteral(" (ARM)"); 0073 break; 0074 case PROCESSOR_ARCHITECTURE_ARM64: 0075 arch = QStringLiteral(" (ARM64)"); 0076 break; 0077 default: 0078 arch = QStringLiteral(" (unknown architecture)"); 0079 } 0080 QString winVer; 0081 //TODO: handle Service packs? 0082 return windowsVersionString() + arch; 0083 } 0084 0085 #endif 0086 0087 #endif // SYSTEMINFORMATION_P_H