Здравствуйте, есть код определяющий модель чипа видеокарты в данном случае моя карта - это NVIDIA Gefore GTX 970 как мне из модели чипа вытащить только производителя чипа. Было так NVIDIA Gefore GTX 970 должно получиться так NVIDIA, ни один метод из интернета мне не помог.
Вот код:
#include "stdafx.h"
#include <iostream>
#include <string>
#include <iomanip>
#include <regex>
using namespace std;
#include <comdef.h>
#include <Wbemidl.h>
#include <windows.h>
#define _WIN32_DCOM
# pragma comment(lib, "wbemuuid.lib")
int main(int argc, _TCHAR* argv[])
{
wcout.imbue(locale("rus_rus.866"));
DISPLAY_DEVICEW dd;
OSVERSIONINFOEXW osv;
osv.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXW);
GetVersionExW((LPOSVERSIONINFO)&osv);
dd.cb = sizeof(DISPLAY_DEVICEW);
EnumDisplayDevicesW(NULL, 0, &dd, EDD_GET_DEVICE_INTERFACE_NAME);
wcout << L"video: " << dd.DeviceString << endl;
wcout << endl;
system("pause");
return 0;
}
Если вам не известно правило по которому можно вычленить имя производителя из названия видеокарты, то можно сделать так.
Напишем функтор для проверки есть ли в строке подстрока:
struct Contains{
std::string str;
explicit Contains(const std::string &str):
str(str)
{}
bool operator()(const std::string &substr) const{
return std::search(str.begin(), str.end(), substr.begin(), substr.end()) != str.end();
}
};
Теперь можно попробовать найти в заданной строке одно из известных нам названий:
std::string company(const std::string &name){
typedef std::vector<std::string> Companies;
typedef Companies::const_iterator Company;
static const Companies companies = {
"RADEON",
"NVIDIA",
"OTHER"
};
Company company = std::find_if(companies.begin(), companies.end(), Contains(name));
if(company == companies.end()){
return "unknown";
}
return *company;
}
Полный пример
Ну если предполагается, что первое слово в полном названии - это производитель чипа, то можно, например, так.
string Device = "NVIDIA Gefore GTX 970";
cout << Device.substr(0, Device.find(' '));
Можно попробовать один костыльный способ: просто вырезать все до первого пробела.
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости