Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/68: Рейтинг темы: голосов - 68, средняя оценка - 4.62
240 / 213 / 84
Регистрация: 18.03.2010
Сообщений: 750
1

Получить информацию о системе

29.05.2011, 19:18. Показов 13256. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Приветствую всех читающих этот пост. Столкнулся с такой проблемкой. Нужно программно получить информацию о ЦП, ОС, объеме ОЗУ и установленного/устан-нных HDD.
С операционной системой вопрос решил. Всё остальное пока не ясно.
Может кто подскажет?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.05.2011, 19:18
Ответы с готовыми решениями:

Как получить информацию о системе?
Привет. Не подскажете как можно получить всю информацию о системе? Почти как AIDA64, только не всю...

Получить информацию об оперативной памяти и информацию об одном из жёстких дисков
Как с помощью функций WinAPI определить информацию об оперативной памяти и информацию о памяти на...

Программа выводящая информацию о системе
Помогите пожалуйста с написанием программы. Разработать программу с графическим интерфейсом,...

Получить информацию о системе
Смысл такой. Мне вверили в "донастройку" почтовый сервак на freebsd еще аж 5. Есть данные рута. В...

11
Brainsbreaker
899 / 374 / 54
Регистрация: 01.02.2011
Сообщений: 1,608
01.06.2011, 10:29 2
Все об ОЗУ и не только: GlobalMemoryStatus.
1
240 / 213 / 84
Регистрация: 18.03.2010
Сообщений: 750
01.06.2011, 12:19  [ТС] 3
Цитата Сообщение от Digit@ll Посмотреть сообщение
Все об ОЗУ и не только: GlobalMemoryStatus.
Спасибо Digit@ll, с ОЗУ и ОС уже разобрался.
Теперь нужно получить инфо о процессоре и установленного/устан-нных HDD.
0
186 / 61 / 4
Регистрация: 29.04.2011
Сообщений: 641
01.06.2011, 15:09 4
я щас учу диалоговые окна, и в книги в примерах как раз о логических дисках
щас я суда кину кусочки кода, и все что связано с ними, что будет не понятно спрашивай

Добавлено через 5 минут
начнем)

во первых я делаю это на диалогах, вот ресурсы диалога
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
ODiskax DIALOG 41, 21, 179, 148 
STYLE WS_SYSMENU | WS_CAPTION | WS_POPUP | DS_MODALFRAME 
CAPTION  "Информация о дисках" 
{ 
    CONTROL  "Логические диски", -1,  "STATIC", WS_BORDER, 72, 6, 65, 12 
    CONTROL "", ID_COMBO_DISK,  "COMBOBOX",  CBS_DROPDOWNLIST  |  WS_VSCROLL, 144, 6, 30, 75 
    CONTROL "Тип диска:", -1,  "STATIC", SS_LEFT, 9, 21, 39, 8 
    CONTROL  "Информация о томе", -1,"BUTTON", BS_GROUPBOX, 9, 35, 131, 41 
    CONTROL  "Метка тома:\nСерийный номер:\nФайловая система:", -1,  "STATIC", SS_LEFT, 13, 46, 71, 24 
    CONTROL  "Информация о диске", -1,  "BUTTON", BS_GROUPBOX, 9, 87, 131, 53 
    CONTROL  "Байтов на сектор:\nСекторов на кластер:\nВсего кластеров:\nСвободных кластеров:", -1,"STATIC", SS_LEFT, 13, 100, 77, 32 
    CONTROL "", ID_VOLINFO, "STATIC", SS_LEFT, 84, 46, 52, 24 
    CONTROL "",ID_DRIVE, "STATIC", SS_LEFT, 54, 21, 60, 8 
    CONTROL "", ID_DISK,  "STATIC",SS_RIGHT, 93, 100, 28, 32 
}
во вторых макросы(прототип кидать не стал, так там всего одна функция
C++
1
2
3
4
#define ID_COMBO_DISK   561
#define ID_DRIVE 562
#define ID_DISK 563
#define ID_VOLINFO 564
а вот код вызова диалога, и функция
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
case ID_COMBO_DISK:
        if(CodeNotify==CBN_SELCHANGE)// если изменился выбор
        {
            int Index=SendDlgItemMessage(hwnd,ID_COMBO_DISK,CB_GETCURSEL,0,0);
            SendDlgItemMessage(hwnd,ID_COMBO_DISK, CB_GETLBTEXT,(WPARAM) Index,(LPARAM)szVolume);
            FillInfo(hwnd,szVolume);
        }
 
//........
 
 
void FillInfo(HWND hwnd,LPSTR szVol)
{
    char szText[80];
    int nDriveType=GetDriveType(szVol);
    switch(nDriveType)
    {
    case DRIVE_REMOVABLE:
        strcpy(szText,"Съемный диск");
        break;
    case DRIVE_FIXED:
        strcpy (szText,"Жесткий диск");
        break;
    case DRIVE_CDROM:
        strcpy(szText,"Сидиром)");
        break;
    }
 
    SetWindowText  (GetDlgItem(hwnd,ID_DRIVE)  ,  szText) ; 
/*Получим информацию о логических характеристиках диска*/ 
    char szLabel[20];//Поле для метки тома 
    char szFat  [10] ; //Поле для типа файловой системы 
    char szTemp[20];//Поле для преобразования чисел в символы 
    DWORD dwVolSer,dwMaxLen,dwFlags;//Для  GetVolumelnformat ion() 
    GetVolumeInformation(szVol,szLabel,sizeof(szLabel),&dwVolSer, &dwMaxLen,&dwFlags,szFat,sizeof(szFat)); 
    strcpy(szText,szLabel);//Копирование метки в строку вывода  szText 
    strcat(szText,"\n");//Добавление перевода строки 
    wsprintf(szTemp,"%X",dwVolSer);//Преобразование номера в символы 
    strcat (szText, szTemp); //Добавление строки с серийным номером 
    strcat(szText,"\n");//Добавление перевода строки 
    strcat(szText,szFat);//Добавление имени файловой системы 
    SetWindowText (GetDlgItem(hwnd, ID_VOLINFO),  szText) ; // Вывод в диалог 
    
    /*Пол у чин информацию о физических характеристиках диска*/ 
 
    DWORD dwSectorsPerCluster,dwBytesPerSector,dwFreeClusters,dwClusters; 
    GetDiskFreeSpace (szVol,  &dwSectorsPerCluster,&dwBytesPerSector, &dwFreeClusters,&dwClusters); 
    wsprintf (szTemp,  "%d",dwBytesPerSector) ;//Размер сектора в символы 
    strcpy (szText,  szTemp)  ; //Копирование в строку вывода  szText 
    strcat(szText,"\n");//Добавление перевода строки 
    wsprintf(szTemp,"%d",dwSectorsPerCluster);//Размер кластера в символы 
    strcat (szText,  szTemp)  ; //Добавление к строке вывода 
    strcat(szText,"\n");//Добавление перевода строки 
    wsprintf (szTemp, "%d",  dwClusters)  ;  //Число кластеров в символы 
    strcat(szText,szTemp);//Добавление к строке вывода 
    strcat(szText,"\n");//Добавление перевода строки 
    wsprintf(szTemp,"%d",dwFreeClusters);//Число свободных кластеров в символы
    strcat(szText,szTemp); //Добавление к строке вывода 
    SetWindowText  (GetDlgItem(hwnd, ID_DISK)  ,  szText)  ; //Вывод в диалог 
}
вот вобщемтто и все, обращайся че не пнятно, так как коментария я писал только для себя)
1
Brainsbreaker
899 / 374 / 54
Регистрация: 01.02.2011
Сообщений: 1,608
04.06.2011, 00:44 5
По процессору:

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
{
    long s1, s2, s3;
    char vendor_id[]="------------";
    TCHAR textBuffer[MAX_PATH];
    
    _asm
    {
        xor eax,eax
        cpuid
        mov dword ptr vendor_id,ebx
        mov dword ptr vendor_id[+4],edx
        mov dword ptr vendor_id[+8],ecx
    }
    wsprintf (textBuffer, "%s", vendor_id);
    MessageBox (hWnd, textBuffer, "Производитель", MB_OK);
    _asm
    {
        mov eax,01h
        xor edx,edx
        cpuid
        mov s1,eax
        mov eax,03h
        xor ecx,ecx
        xor edx,edx
        cpuid
        mov s2,edx
        mov s3,ecx
    }
    wsprintf (textBuffer, "%08X-%08X-%08X", s1, s2, s3);
    MessageBox (hWnd, textBuffer, "Серийный номер", MB_OK);
}
1
374 / 321 / 32
Регистрация: 24.02.2011
Сообщений: 1,512
Записей в блоге: 1
04.06.2011, 03:19 6
ЛеЖиК), как вы получаете сведения о количестве (и типе) дисковых устройств системы? Это самое интересное.
Тот способ, что известен мне, не такой простой, во всяком случае не идет ни в какое сравнение с GetSysytemInfo и GlobalMemoryStatus.
0
186 / 61 / 4
Регистрация: 29.04.2011
Сообщений: 641
04.06.2011, 12:50 7
bigredcat, извеняюсь, забыл написать одну функцию.

когда создаем диалог то в combo_box записываем все диски , что есть на компе таким образом:
C++
1
2
3
4
5
6
7
8
9
10
11
dwSize=GetLogicalDriveStrings(0  ,NULL) ; // Получим размер строки 
        hHeap=GetProcessHeap();//Указатель на кучу процесса 
        szDrives= (LPSTR) HeapAlloc (hHeap,  HEAP_ZERO_MEMORY,  dwSize); // Выделим памят
        GetLogicalDriveStrings(dwSize,szDrives);//Получим все наличные диски 
        szNext=szDrives;//Текущим адрес в строке =• начальному 
        while(szNext[0]!=0)
        { 
            SendDlgItemMessage(hwnd,ID_COMBO_DISK,CB_ADDSTRING,0, (LPARAM) szNext) ; 
            szNext=strchr  (szNext,0)+1; // Текущий адрес « следующему 
        } 
        HeapFree(hHeap, 0,szDrives); // Освободим память
Добавлено через 3 минуты
и еще

если
C++
1
 GetVolumeInformation(szVol,szLabel,sizeof(szLabel),&dwVolSer, &dwMaxLen,&dwFlags,szFat,sizeof(szFat));
возвращает положительное значение, то диск существует, если false то его нет
1
374 / 321 / 32
Регистрация: 24.02.2011
Сообщений: 1,512
Записей в блоге: 1
04.06.2011, 14:16 8
Ну, так мы получим только DOS-имена смонтированных (и то, возможно, не всех) томов, но не список дисковых устройств. А судя по требованиям TC (установленного/устан-нных HDD), ему нужны именно имена дисковых устройств, типа, Western Digital WD10EALX. Кстати, кроме того, что диск (как физический, так и логический) может быть не отформатирован, он может быть еще и не смонтирован (т.е. не иметь назначенной буквы) или же может быть смонтирован на другой том (и тоже не иметь буквы).
1
186 / 61 / 4
Регистрация: 29.04.2011
Сообщений: 641
04.06.2011, 18:17 9
ну тогда надо все делать более сложно, к4ак ты предлогаешь
я написал как бы делал я
0
374 / 321 / 32
Регистрация: 24.02.2011
Сообщений: 1,512
Записей в блоге: 1
04.06.2011, 18:45 10
Тот способ, что я знаю довольно громоздкий. Думал, может что-то проще знаете.
А так вот пример Enumdisk1. Он из DDK и что бы собирался в VS, помнится, нужно определить несколько структур из заголовков DDK. Но работает в usermode.
1
240 / 213 / 84
Регистрация: 18.03.2010
Сообщений: 750
04.06.2011, 22:48  [ТС] 11
Digit@ll, спасибо за код.

Цитата Сообщение от bigredcat Посмотреть сообщение
судя по требованиям TC (установленного/устан-нных HDD), ему нужны именно имена дисковых устройств, типа, Western Digital WD10EALX
да, именно так.
0
186 / 61 / 4
Регистрация: 29.04.2011
Сообщений: 641
04.06.2011, 23:24 12
jonson, тогда извиняюсь, кинул ненужные вам куски кода.
0
04.06.2011, 23:24
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.06.2011, 23:24
Помогаю со студенческими работами здесь

Получить информацию о системе
Задание от начальства "собрать всю информацию с серверов" и если инвентарники и прочее придется...

Как получить информацию о системе?
Как получить информацию о системе анологичную как 'System info' в MS OFFICE

Получить информацию о дисковой системе компьютера
Задача: Получить информацию о дисковом системе компьютера,модель,емкость геометрия, и т.д разделы...

Как получить информацию об окнах в системе?
??? как получить информацию об окнах в системе и делать их активными/восстанавливать по щелчку...


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

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