Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.80/15: Рейтинг темы: голосов - 15, средняя оценка - 4.80
15 / 15 / 5
Регистрация: 21.08.2012
Сообщений: 115
Записей в блоге: 2
1

Информация о железе Builder XE2

08.04.2014, 07:39. Показов 3103. Ответов 31
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток! Подскажите пожалуйста, как и какими средствами можно получить: марку процессора, видеокарты, материнки и т.д.? Среда Builder XE2
Подскажите куда копать!?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.04.2014, 07:39
Ответы с готовыми решениями:

История активности файла. (C++ Builder 6, C++ Builder XE2)
Здравствуйте. Пришла идея написать программу для выявления истории активности файла, например есть...

С++Builder XE2 + JSON
Принимаю json пакеты, до этого хитрил с регулярками или писал простенькие парсеры, но сейчас...

Книги по C++ Builder XE2
Здравствуйте. Скачал C++ Builder XE2, запустил и задался вопросом где бы книгу найти хорошую по C++...

Ошибка в C++ Builder XE2 (Pulsar)
Скачал вот отсюда http://запрещенная ссылка Установил с образа который там был Установил кряк.....

31
511 / 196 / 26
Регистрация: 07.08.2013
Сообщений: 814
08.04.2014, 09:32 2
Да здравствует Поиск!
Нужно узнать программно архитертуру своего железа (компьютера). / C++ Builder
1
15 / 15 / 5
Регистрация: 21.08.2012
Сообщений: 115
Записей в блоге: 2
08.04.2014, 10:38  [ТС] 3
Kulgar, это да, видел. Но там нет того что именно надо. А надо типа такого получить процессор - Intel(R) Core(TM)2 Duo CPU E8400 @ 3.00GHz
а Функцией которая там предствлена получаю - "Intel процессор"
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
08.04.2014, 11:36 4
lanu4, а вот WMI по запросу "select Name from WIN32_processor" возвращает именно то, что тебе нужно. Как работать с WMI из Билдера знаешь?
0
15 / 15 / 5
Регистрация: 21.08.2012
Сообщений: 115
Записей в блоге: 2
08.04.2014, 11:55  [ТС] 5
UI, в билдере нет в C# видел краем глаза, но не приходилось. Можешь тыкнуть где именно посмотреть? или пример
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
08.04.2014, 12:16 6
Лучший ответ Сообщение было отмечено lanu4 как решение

Решение

Пример так пример:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#include  <comdef.h>
#include  <wbemidl.h>
 
// ...
 
void GetWmiInfo(TStrings *L, wchar_t* wsQuery)
{
    HRESULT hres;
    hres = CoInitializeSecurity(NULL, -1, NULL, NULL, RPC_C_AUTHN_LEVEL_DEFAULT,
        RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE, NULL);
 
    IWbemLocator *pWbemLocator = NULL; // провайдер
    if (CoCreateInstance(CLSID_WbemAdministrativeLocator, NULL, CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER,
        IID_IUnknown, (void**)&pWbemLocator) == S_OK)
    {
        IWbemServices *pWbemServices = NULL;
        wchar_t* wsNamespace = (L"ROOT\\CIMV2");
        if (pWbemLocator->ConnectServer(wsNamespace, NULL, NULL, NULL, 0, NULL, NULL, &pWbemServices) == S_OK)
        {
            IEnumWbemClassObject *pEnumClassObject = NULL;
            wchar_t* wsWQL = L"WQL";
            if (pWbemServices->ExecQuery(wsWQL, wsQuery, WBEM_FLAG_RETURN_IMMEDIATELY, NULL, &pEnumClassObject) == S_OK)
            {
                IWbemClassObject *pClassObject = NULL;
                ULONG uCount = 1, uReturned = 0;
                if (pEnumClassObject->Reset() == S_OK)
                {
                    int iEnumIdx = 0;
                    hres = pEnumClassObject->Next(WBEM_INFINITE, uCount, &pClassObject, &uReturned);
                    while (hres == S_OK)
                    {
                        L->Add("[" + IntToStr(iEnumIdx) + "]");
                        SAFEARRAY *pvNames = NULL;
                        if (pClassObject->GetNames(NULL, WBEM_FLAG_ALWAYS | WBEM_MASK_CONDITION_ORIGIN,
                            NULL, &pvNames) == S_OK)
                        {
                            long vbl, vbu;
                            SafeArrayGetLBound(pvNames, 1, &vbl);
                            SafeArrayGetUBound(pvNames, 1, &vbu);
                            for (long idx = vbl; idx <= vbu; idx++)
                            {
                                long aidx = idx;
                                wchar_t *wsName = 0;
                                VARIANT vValue;
                                VariantInit(&vValue);
                                SafeArrayGetElement(pvNames, &aidx, &wsName);
                                BSTR bs = SysAllocString(wsName);
                                HRESULT hRes = pClassObject->Get(bs, 0, &vValue, NULL, 0);
                                SysFreeString(bs);
                                if (hRes == S_OK)
                                {
                                    AnsiString s;
                                    Variant v = *(Variant*)&vValue;
                                    if (v.IsArray())
                                    {
                                        for (int i = v.ArrayLowBound(); i <= v.ArrayHighBound(); i++)
                                        {
                                            Variant a = v.GetElement(i);
                                            if (!s.IsEmpty()) s += ", ";
                                            s += VarToStr(a);
                                        }
                                    }
                                    else
                                    {
                                        s = VarToStr(v);
                                    }
                                    L->Add(AnsiString(wsName) + "=" + s);
                                }
                                VariantClear(&vValue);
                                SysFreeString(wsName);
                            }
                        }
                        if (pvNames)
                            SafeArrayDestroy(pvNames);
                        iEnumIdx++;
                        hres = pEnumClassObject->Next(WBEM_INFINITE, uCount,
                            &pClassObject, &uReturned);
                    } // WHILE
                    if (hres != S_OK)
                        L->Add((hres & 0xFFFF));
                } // pEnumClassObject->Reset()
                if (pClassObject)
                    pClassObject->Release();
            }
            if (pEnumClassObject)
                pEnumClassObject->Release();
        }
        if (pWbemServices)
            pWbemServices->Release();
    }
    if (pWbemLocator)
        pWbemLocator->Release();
}
 
// Вызывать так:
    wchar_t* ss = L"select Name from WIN32_processor";
    GetWmiInfo(Memo1->Lines, ss);
, тестировалось именно в XE2.
6
15 / 15 / 5
Регистрация: 21.08.2012
Сообщений: 115
Записей в блоге: 2
08.04.2014, 12:35  [ТС] 7
UI, Спасибо огромное!!! В остальном я список селектов составлю.
0
0 / 0 / 0
Регистрация: 07.02.2016
Сообщений: 30
23.03.2016, 18:16 8
А как в borland C++ builder тоже самое реализовать?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
23.03.2016, 18:33 9
Ну так в посте №6 - это что, не Билдер?
0
0 / 0 / 0
Регистрация: 07.02.2016
Сообщений: 30
23.03.2016, 23:56 10
в 6-ом не компилируется (((
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
24.03.2016, 00:41 11
Нормально все компилируется:
Миниатюры
Информация о железе Builder XE2  
1
0 / 0 / 0
Регистрация: 07.02.2016
Сообщений: 30
24.03.2016, 15:40 12
выдает ошибку:
[Linker Error] 'E:\PROGRAMMS\PRJ\WBEMUUID.LIB' contains invalid OMF record, type 0x21 (possibly COFF)
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
24.03.2016, 15:44 13
Это не компилятор, это проблемы линковки. Не надо подсовывать Билдеру lib-файл от Visual Studio. Возьми вот этот, и положи lib в папку с проектом:
Вложения
Тип файла: 7z WBEMUUID.7z (143 байт, 21 просмотров)
1
0 / 0 / 0
Регистрация: 07.02.2016
Сообщений: 30
24.03.2016, 16:14 14
спасибо, все работает, а таким образом как можно получить информацию о материнской плате?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
24.03.2016, 19:04 15
Цитата Сообщение от JoniRich Посмотреть сообщение
как можно получить информацию о материнской плате?
C++
1
wchar_t* ss = L"select * from Win32_BaseBoard";
2
0 / 0 / 0
Регистрация: 07.02.2016
Сообщений: 30
25.03.2016, 07:36 16
спасибо огромное volvo

Добавлено через 10 минут
Есть код - получение информации о паролях, код под консольное приложение, компилируется 6 буилдере нормально но вос как сделать что б по нажатии кнопки инфо выводилась в Memo
так не работает
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
{ 
typedef struct tagPASSWORD_CACHE_ENTRY {
    WORD cbEntry;       // size of this entry, in bytes
    WORD cbResource;        // size of resource name, in bytes
    WORD cbPassword;        // size of password, in bytes
    BYTE iEntry;        // entry index
    BYTE nType;     // type of entry
    BYTE abResource[1]; // start of resource name
                // password immediately follows resource name
} PASSWORD_CACHE_ENTRY;
char buf[1024], ob1[1024];
BOOL CALLBACK pce (PASSWORD_CACHE_ENTRY *x, DWORD)
 
          memmove(buf, x->abResource, x->cbResource);
                buf[x->cbResource] = 0;
        CharToOem(buf, ob1);
    Memo1->Lines->Add("%s : "+ AnsiString (ob1));
 
            memmove(buf, x->abResource+x->cbResource, x->cbPassword);
    buf[x->cbPassword] = 0;
    CharToOem(buf, ob1);
    printf("%s\n", ob1);
 
    //return TRUE;
HINSTANCE hi = LoadLibrary("mpr.dll");
    if(!hi)
    {
        puts("Couldn't load mpr.dll");
        return;
    }
    WORD (__stdcall *enp)(LPSTR, WORD, BYTE, void*, DWORD) =
         WORD (__stdcall *)(LPSTR, WORD, BYTE, void*, DWORD))GetProcAddress(hi, "WNetEnumCachedPasswords");
    if(!enp)
    {
        puts("Couldn't import function");
        return;
    }
    (*enp)(0, 0, 0xff, pce, 0);
    getch();
    FreeLibrary(hi);    
}
Добавлено через 5 минут
вот ошибки которые выдает
[C++ Error] (830): E2108 Improper use of typedef 'BOOL'
[C++ Error] (830): E2379 Statement missing ;
[C++ Error] (833): E2451 Undefined symbol 'x'
[C++ Error] (850): E2188 Expression syntax
[C++ Error] (850): E2293 ) expected
[C++ Error] (856): E2451 Undefined symbol 'pce'

Добавлено через 6 часов 33 минуты
C++
1
wchar_t* ss = L"select * from Win32_BaseBoard";
поначалу информацию выдавала, сейчас нет и ошибок ни каких не выдает в чем может быть дело?

Добавлено через 5 часов 26 минут
Раньше все показывало теперь просто четыре цифры и все ни какую информацию не выдает
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
//-----------------Èíôîðìàöèÿ î ìàòåðèíñêîé ïëàòå----------------------------------------------------------
 
void __fastcall TMainForm1::SpeedButton43Click(TObject *Sender)
{
 Memo1->Lines->Add("Ìàòåðèíñêàÿ ïëàòà: ");
   wchar_t* ss = L"select * from Win32_BaseBoard";
  GetWmiInfo(Memo1->Lines, ss);
}
//---------------------------------------------------------------------------
//--------------------Èíôîðìàöèÿ î BIOS---------------------------------------------
 
void __fastcall TMainForm1::SpeedButton44Click(TObject *Sender)
{
  Memo1->Lines->Add("Èíôîðìàöèÿ î BIOS: ");
    wchar_t* ss = L"select * from Win32_Bios";
  GetWmiInfo(Memo1->Lines, ss);
}
 
void __fastcall TMainForm1::SpeedButton45Click(TObject *Sender)
{
 Memo1->Lines->Add("Èíôîðìàöèÿ î óñòðîéñòâàõ îõîëîæäåíèÿ: ");
    wchar_t* ss = L"select * from Win32_Fan";
  GetWmiInfo(Memo1->Lines, ss);
}
//---------------------------------------------------------------------------
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
25.03.2016, 17:04 17
Цитата Сообщение от JoniRich Посмотреть сообщение
Раньше все показывало теперь просто четыре цифры и все ни какую информацию не выдает
Измени строки
C++
1
2
                    if (hres != S_OK)
                        L->Add((hres & 0xFFFF));
на
C++
1
2
                    if (hres != S_OK)
                        L->Add(String().sprintf(L"0x%X", hres));
, и покажи, какое именно значение выдается. Попробуем расшифровать код ошибки.
0
0 / 0 / 0
Регистрация: 07.02.2016
Сообщений: 30
25.03.2016, 17:18 18
изменил выдает следующие ошибки:
[C++ Error] (922): E2034 Cannot convert 'wchar_t *' to 'const char *'
[C++ Error] (922): E2342 Type mismatch in parameter 'format' (wanted 'const char *', got 'wchar_t *')
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
25.03.2016, 17:27 19
Блин, опять ровесники динозавров. Ну поправь, у меня нет под рукой этого отстойного компилятора, чтобы проверять каждый чих. Как-то вот так:
C++
1
2
                    if (hres != S_OK)
                        L->Add(String().sprintf("0x%X", hres));
, хотя иногда проще договориться с обезьяной, у которой в руках граната, чем с Билдером.
1
0 / 0 / 0
Регистрация: 07.02.2016
Сообщений: 30
25.03.2016, 18:09 20
Теперь выдает следующее:
Материнская плата:
0x80041003
и так по всем параметрам

Добавлено через 36 минут
информацию о процессоре получил следующим образом
C++
1
2
3
4
5
6
7
8
9
10
 Memo1->Lines->Add("Hardware information: \n");
   Memo1->Lines->Add("  OEM ID: " +AnsiString (siSysInfo.dwOemId));
   Memo1->Lines->Add("  Processor Name: " +AnsiString (siSysInfo.dwProcessorName);
   Memo1->Lines->Add("  Number of processors: "+ AnsiString (siSysInfo.dwNumberOfProcessors));
   Memo1->Lines->Add("  Page size: "+ AnsiString (siSysInfo.dwPageSize));
   Memo1->Lines->Add("  Processor type: "+ AnsiString (siSysInfo.dwProcessorType));
   Memo1->Lines->Add("  Minimum application address: "+ IntToStr (siSysInfo.lpMinimumApplicationAddress));
   Memo1->Lines->Add("  Maximum application address: "+ IntToStr (siSysInfo.lpMaximumApplicationAddress));
   Memo1->Lines->Add("  Active processor mask: "+ AnsiString  (siSysInfo.dwActiveProcessorMask));
}
как получить также имя процессора и материнскую плату ?

Добавлено через 1 минуту
C#
1
dwProcessorName
- ошибка
0
25.03.2016, 18:09
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.03.2016, 18:09
Помогаю со студенческими работами здесь

С++ Builder XE2 VCL Style Designer
У С++ Builder XE2 есть полезная вещь - VCL Style Designer. Во время разработки программы можно...

Как подключить Open Gl к с++ Builder xe2?
Как подключить Open Gl к с++ Builder xe2?

Как установить VirtualTree на Builder XE2
Пробывал вот такой рецепт из старой темы на этом форуме: //-------------, если вы пользуетесь...

С++ Builder XE2 непойму в чём ошибка
Всем доброго времени суток. const char *NamedMutex= &quot;OneOnly&quot;; HANDLE CheckInstance(const char...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru