Jump to content
  • Search In
    • More options...
    Find results that contain...
    Find results in...

    [C++] Pobranie podstawowych informacji o komputerze


    Ogen Dogen
     Share

    Recommended Posts

    Wrzucam kilka gotowych funkcji do pobrania wybranych informacji o komputerze użytkownika. Funkcje zwracają wartości w formie stringa lub inta, więc nie wymaga żadnych konwersji.

    Funkcje działają tylko na Windowsie (minimum 2000). Na systemach z Windows Vista i nowszym niektóre będą potrzebować uprawnień administratora.

    Pobrane wartości bazują na informacjach znajdujących się w systemie, jeżeli on posiada błędne informacje to takie też zwróci funkcja. (rzadko się zdarza)  Aby mieć 100% pewność trzeba by było za pomocą Assemblera pobrać dane z BIOS'u.

     

    Biblioteki użyte w funkcjach :

    #include <iostream>
    #include <string>
    #include <regex> // wymaga c++11
    #include <windows.h>
    #include <fstream>
    #include <conio.h>
    

    Pobranie adresu MAC karty sieciowej :

    string getMacAddress()
    {
        system("ipconfig /all > tmp.txt");
        ifstream plik("tmp.txt");
        if (!plik) cout<<"blad odczytu"<<endl;
        string linia;
        bool found=false;
        getline(plik,linia);
        while (!plik.eof())
        {
            getline(plik,linia);
            if (linia.find("Adres fizyczny") != string::npos || linia.find("Physical address") != string::npos)
            {
                string adres = "";
                for (int i=linia.length()-17; i<=linia.length(); i++) adres+=linia[i];
                plik.close();
                system("del tmp.txt");
                return adres;
                break;
            }
        }
        plik.close();
        system("del tmp.txt");
        return "error";
    }
    

    Pobranie modelu płyty głównej : (wymaga admina)

    string getMotherBoardName()
    {
        HKEY hkSoftware;
        LONG result;
        result = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "HARDWARE\\DESCRIPTION\\System\\BIOS", 0, KEY_ALL_ACCESS, &hkSoftware);
        if (result == ERROR_SUCCESS)
        {
            char buf[32];
            DWORD dwBufSize = 20;
            DWORD dwRegsz = REG_SZ;
            result = RegQueryValueEx( hkSoftware, "BaseBoardProduct", NULL, & dwRegsz,( LPBYTE ) buf, & dwBufSize );
            string name = buf;
            RegCloseKey(hkSoftware);
            return name;
        }
        RegCloseKey(hkSoftware);
        return "error";
    }
    

    Pełna nazwa procesora : (wymaga admina)

    string getProcessorName()
    {
        HKEY hkSoftware;
        LONG result;
        char sciezka[128]="HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0";
        result = RegOpenKeyEx(HKEY_LOCAL_MACHINE, sciezka, 0, KEY_ALL_ACCESS, &hkSoftware);
        if (result == ERROR_SUCCESS)
        {
            char buf2[64];
            DWORD dwBufSize = 63;
            DWORD dwRegsz = REG_SZ;
            result = RegQueryValueEx( hkSoftware, "ProcessorNameString", NULL, & dwRegsz,( LPBYTE ) buf2, & dwBufSize );
            if (result != ERROR_SUCCESS) cout<<result;
            string name = buf2;
            RegCloseKey(hkSoftware);
            return name;
        }
        RegCloseKey(hkSoftware);
        return "error";
    }
    

    Pobranie rozmiaru pamięci RAM w MB: (zwraca -1 jeśli wystąpił problem z plikiem, zwraca -2 jeśli wystąpi problem z pobraniem wartości z pliku). Jeżeli potrzebna w innej jednostce to można przeliczyć, funkcja zwraca inta.

    int getRamSize()
    {
        system("systeminfo > tmp.txt");
        ifstream plik("tmp.txt");
        if (!plik) return -1; // błąd
        string linia;
        getline(plik, linia);
        char output[5];
        while(!plik.eof())
        {
            getline(plik, linia);
            if (linia.find("rozmiar") != string::npos || linia.find("Total Physical Memory") != string::npos)
            {
                int wsk = 0;
                for (int i=0; i<linia.length(); i++)
                {
                    if (linia[i] >= '0' && linia[i] <= '9')
                    {
                        output[wsk]=linia[i];
                        wsk++;
                    }
                }
                break;
            }
        }
        plik.close();
        system("del tmp.txt");
        if (output[0] == (char)0) return -2;
        stringstream ss;
        ss << output;
        int i_output;
        ss >> i_output;
        return i_output;
    }
    

    Przykładowe użycie :

    int main()
    {
        cout<<"Adres MAC : "<<getMacAddress()<<endl;
        cout<<"Twoj procesor : "<<getProcessorName()<<endl;
        cout<<"Twoja plyta glowna : "<<getMotherBoardName()<<endl;
        cout<<"Rozmiar RAM(MB) : "<<getRamSize()<<endl;
        getch();
    }
    
    Link to comment
    Share on other sites

    Guest
    This topic is now closed to further replies.
     Share

    ×
    ×
    • Create New...