QT C++ ile detaylı sistem bilgisi alma
Herkese merhabalar, Bu yazımızda Qt C++kullanarak detaylı sistem bilgisini almayı göreceğiz. Bu çalışmada QSysInfo, QStorageInfo, QNetworkInterface, QSettings, QProcess sınıflarını kullanacağız.Hadi başlayalım.
Orjinal içeriğe aşağıdaki linkten ulaşabilirsiniz.
https://thecodeprogram.com/reading-detailed-system-information-with-qt-c--
Bu çalışmada QT C++ ile bir console uygulaması geliştireceğiz.
QT += core
QT += network
Komut dizini için gerekli olan kütüphaneleri ekleyeli. Console ekranına bilgileri yazdırmak için cout komutunu kullanacağız.
#include <iostream>
using namespace std;
Aynı zamanda aşağıdaki kütüphaneleride projemize eklememiz gerekmektedir. Bu sayede ilgili komutları çağırabileceğiz
#include <QSysInfo>
#include <QStorageInfo>
#include <QNetworkInterface>
#include <QSettings>
#include <QProcess>
Şimdi ilk olarak QSystemInfo sınıfı ile başlayalım
Ek bilgi: system komutu ve title parametresi kullanarak komut dizini başlığı değiştirilebilir.
QSysInfo sınıfı bazı sistem bilgilerini alabilmek için static methodlara sahiptir. Fakat QSysInfo sistem bilgileri için bütün komutları sağlamaz. Aşağıda QSysInfo tarafından sağlanan sistem bilgi metodlarını inceleyelim.
system("title SystemInfo_Example - Thecodeprogram");
cout << "QT C++ System Info" << endl;
cout << "QSysInfo Class" << endl;
cout << "CPU Architecture : " << QSysInfo::currentCpuArchitecture().toLocal8Bit().constData() << endl;
cout << "Product Type : " << QSysInfo::prettyProductName().toLocal8Bit().constData() << endl;
cout << "Kernel Type : " << QSysInfo::kernelType().toLocal8Bit().constData() << endl;
cout << "Kernel Version : " << QSysInfo::kernelVersion().toLocal8Bit().constData() << endl;
cout << "Machine ID : " << QSysInfo::machineHostName().toLocal8Bit().constData() << endl;
cout << "-----------------------------------------------------------------" << endl;
Şimdi QStorageInfo sınıfı ile sabit disk bilgilerine erişelim. Bu sayede sabit disklerin name, rootpath, filesystem, ve disk spaces bilgilerini okuyacağız.
cout << "QStorageInfo Class" << endl;
cout << "Mounted Volumes" << endl;
foreach (const QStorageInfo &storage, QStorageInfo::mountedVolumes()) {
if (storage.isValid() && storage.isReady()) {
if (!storage.isReadOnly()) {
cout << "Name:" << storage.name().toLocal8Bit().constData() << " ";
cout << "Root:" << storage.rootPath().toLocal8Bit().constData() << " ";
cout << "FileSys:" << storage.fileSystemType().constData() << " ";
cout << "Disk Spaces:";
cout << storage.bytesAvailable()/1000000000 << "GB";
cout << "/";
cout << storage.bytesTotal()/1000000000 << "GB";
cout << endl;
}
}
}
Şimdi ise sistem Network durumunu almaya çalışacağız. QNetworkInterface sınıfı ile cihazın Network bilgilerine erişeceğiz.
With QNetworkInterface sınıfı ile hangi bağlantı arayüz cihazı aktif IP numarası gibi bilgileri alacağız. Aynı zamanda cihazın MAC adresi bilgilerinede erişeceğiz.
Aşağıdaki kod bloğunda kullanım görülmektedir.
cout << "QNetworkInterface Class" << endl;
cout << "Connected Network Informations" << endl;
foreach(QNetworkInterface networkInterface, QNetworkInterface::allInterfaces())
{
if (networkInterface.flags().testFlag(QNetworkInterface::IsUp) && !networkInterface.flags().testFlag(QNetworkInterface::IsLoopBack))
{
foreach (QNetworkAddressEntry entry, networkInterface.addressEntries())
{
if ( entry.ip().toString().contains(".")){
cout << "Interface:"<< networkInterface.name().toLocal8Bit().constData() << " ";
cout << "IP:"<< entry.ip().toString().toLocal8Bit().constData() << " ";
cout << "MAC:" << networkInterface.hardwareAddress().toLocal8Bit().constData() << endl;
}
}
}
}
cout << "-----------------------------------------------------------------" << endl;
Şimdi sıra QSettings sınıfını kullanmanın sırası.
QSettings sınıfı ile system registry'ye erişeceğiz ve bazı bilgileri oradan çekeceğiz. Kayıt defterinde sistem CPU gibi bazı BIOS'a ait bilgiler bulunmaktadır.
Aşağıdaki kod bloğunda kullanımı görebilirsiniz.
cout << "QSettings Class" << endl;
cout << "System BIOS informations. ONLY FOR WINDOWS." << endl;
QSettings settings("HKEY_LOCAL_MACHINE\\HARDWARE\\DESCRIPTION\\System\\BIOS", QSettings::NativeFormat);
cout << "Base Manufacturer : " << settings.value("BaseBoardManufacturer", "0").toString().toLocal8Bit().constData() << endl;
cout << "Base Product : " << settings.value("BaseBoardProduct", "0").toString().toLocal8Bit().constData() << endl;
cout << "BIOS Vendor : " << settings.value("BIOSVendor", "0").toString().toLocal8Bit().constData() << endl;
cout << "BIOS Release Date : " << settings.value("BIOSReleaseDate", "0").toString().toLocal8Bit().constData() << endl;
cout << "System Manufacturer : " << settings.value("SystemManufacturer", "0").toString().toLocal8Bit().constData() << endl;
cout << "Product Name : " << settings.value("SystemProductName", "0").toString().toLocal8Bit().constData() << endl;
cout << "System SKU : " << settings.value("SystemSKU", "0").toString().toLocal8Bit().constData() << endl;
cout << "-----------------------------------------------------------------" << endl;
Son olarak QProcess kullanarak sistem bilgilerini okumaya çalışacağız. Bu yöntemi internette araştırdığınızda C# ile kullanımını göreceksiniz. Burada QT ile kullanacağız, komutlar aynı komut.
Burada CPU adı, GPU adı ve GPU bellek bilgileri alınacak.
QProcess process_system;
QString system_output;
if(QSysInfo::kernelType() == "winnt")
{
QString cpuname = "wmic cpu get name";
process_system.start(cpuname);
process_system.waitForFinished();
system_output = process_system.readAllStandardOutput().toUpper();
cout << "CPU : " << system_output.toLocal8Bit().constData() << endl;
QString gpuname = "wmic PATH Win32_videocontroller get VideoProcessor ";
process_system.start(gpuname);
process_system.waitForFinished();
system_output = process_system.readAllStandardOutput();
cout << "GPU : " << system_output.toLocal8Bit().constData() << endl;
QString gpuRam = "wmic PATH Win32_VideoController get AdapterRAM";
process_system.start(gpuRam);
process_system.waitForFinished();
system_output = process_system.readAllStandardOutput();
cout << "GPU RAM : " << system_output.toLocal8Bit().constData() << endl;
}
Eğer Linux kullanıyorsanız aşağıdaki yöntemi kullanabilirsiniz:
if(QSysInfo::kernelType() == "linux")
{
QString linuxcpuname = "cat /proc/cpuinfo | grep 'model name' | uniq";
process_system.start(linuxcpuname);
process_system.waitForFinished();
QString linuxOutput = process_system.readAllStandardOutput();
cout << "Linux CPU Info : " << linuxOutput.toLocal8Bit().constData() << endl;
}
Görüldüğü üzere örneğimiz hazır. Artık sistem bilgilerini alabiliriz. Bu örnekteki kod örneklerini kullanarak ihtiyaçlarınıza göre sistem bilgilerini alabilirsiniz.
Örnek kod dosyasına Github üzerinden aşağıdaki link ile erişebilirsiniz:
https://github.com/thecodeprogram/SystemInfo_Example
Burak Hamdi TUFAN
Comments