Ogen Dogen 2 806 Właściciel Last activity: 19 hours ago Posted August 20, 2015 Właściciel Share Posted August 20, 2015 Posted August 20, 2015 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 More sharing options...
Recommended Posts