Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 06.11.2014
Сообщений: 13

Некорректный вывод информации о системе

06.11.2014, 12:46. Показов 1292. Ответов 3
Метки нет (Все метки)

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

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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
#include <windows.h>
#include "Unit1.h"
#include "Registry.hpp"
#include <stdio.h>
// Use to convert bytes to MB
#define DIV 1048576
#define WIDTH 7
#define UNICODE
#include <conio.h>
 
//--------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
 
 
__int64 Size;
__int64 FreeSpace;
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::FormCreate(TObject *Sender)
{
 // шрифты
 for(int i=0;i<Screen->Fonts->Count;i++)
 ComboBox1->Items->Add(Screen->Fonts->Strings[i]);
 ComboBox1->ItemIndex=0;
 Label1->Font->Name=ComboBox1->Text;
 
                  // работа с именем компютера
 unsigned long Size=MAX_COMPUTERNAME_LENGTH + 1;
 char *Buffer=new char[Size];
 GetComputerName(Buffer, &Size);
 Edit1->Text=Buffer;
 delete [] Buffer;
 // версия ос
 
 
if (Win32MajorVersion == 5 && Win32MinorVersion == 2){
Edit2->Text = "Windows 2003";
}
else if (Win32MajorVersion == 6 && Win32MinorVersion == 0){
Edit2->Text = "Windows Vista";
}
else if (Win32MajorVersion == 5 && Win32MinorVersion == 1){
Edit2->Text = "Windows XP";
}
else if (Win32MajorVersion == 5 && Win32MinorVersion == 0){
Edit2->Text = "Windows 2000";
}
else if (Win32MajorVersion == 4 && Win32MinorVersion == 0){
Edit2->Text = "Windows NT 4.0";
}
else if (Win32MajorVersion == 4 && Win32MinorVersion == 90){
Edit2->Text = "Windows Me";
}
else if (Win32MajorVersion == 4 && Win32MinorVersion == 10){
Edit2->Text = "Windows 98";
}
else if (Win32MajorVersion == 6 && Win32MinorVersion == 1){
Edit2->Text = "Windows 7";   }
else if (Win32MajorVersion == 4 && Win32MinorVersion == 0){
Edit2->Text = "Windows 95";
}
else Edit2->Text = "Incomprehensible version OS ";
 
 
// процесор
 
 
AnsiString ProcessorName="Unknown";
TRegistry *reg = new TRegistry;
reg->RootKey = HKEY_LOCAL_MACHINE;
reg->OpenKey("Hardware\\Description"
"\\System\\CentralProcessor\\0", false);
ProcessorName=reg->ReadString("ProcessorNameString");
delete reg;
 
Edit3->Text = ProcessorName;
 
// частота прогсцесоора
 
   DWORD dwTimerHi, dwTimerLo;
   double dRes;
   asm
    {
       DW 0x310F
       mov dwTimerLo, EAX
       mov dwTimerHi, EDX
     }
   Sleep (500);
   asm
    {
       DW 0x310F
       sub EAX, dwTimerLo
       sub EAX, dwTimerHi
       mov dwTimerLo, EAX
       mov dwTimerHi, EDX
    }
   dRes = dwTimerLo/(1000.0*500);
Edit4->Text = dRes/1000;
 
// оперативка
 
MEMORYSTATUSEX statex;
statex.dwLength = sizeof (statex);
GlobalMemoryStatusEx (&statex);
Edit5->Text = statex.ullTotalPhys/DIV;
 
// локальные диски
 wchar_t disks[256]; // список дисковввввввввввввввввввввв
wchar_t *disk;
DWORD sizebuf=256;
GetLogicalDriveStringsW(sizebuf, disks);
disk=disks;
while (*disk)
{
        Form1->Memo1->Lines->Add(disk);
        ComboBox2->Items->Add(disk);
        disk=disk+wcslen(disk)+1;
}
 
 
 
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::ComboBox1Change(TObject *Sender)
{
 Label1->Font->Name=ComboBox1->Text;
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::ComboBox2Change(TObject *Sender)
{
 
 if(ComboBox2->ItemIndex>-1)
 {
  Size=DiskSize(ComboBox2->ItemIndex);
  FreeSpace=DiskFree(ComboBox2->ItemIndex);
  if(Size>0)
  {
   Edit7->Text=IntToStr(Size/1024/1024);
   Edit8->Text=IntToStr(FreeSpace/1024/1024);
  }
  else
  ShowMessage("Диска нет!");  }
}
//---------------------------------------------------------------------------
Вот файл проекта если нужно
Вложения
Тип файла: rar Fonts.rar (874.7 Кб, 14 просмотров)
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.11.2014, 12:46
Ответы с готовыми решениями:

Некорректный вывод информации
Есть такой код, который отображает 1 из этапов на определенном участке времени. но есть проблема, он выдает и текущий этап и все...

Некорректный вывод информации в MaskEdit
Доброе время суток) имеется MaskEdit с маской !99-99-99;1;_ при открытии формы в MaskEdit присваивается значение из числовой ячейки из...

Некорректный вывод информации при генерации отчета
Всем добрый вечер. Подскажите как исправить ситуацию. При генерации отчета в WinXP (32) вывод информации корректный, в Win7 (64) выводится...

3
place status here
 Аватар для gunslinger
3190 / 2227 / 640
Регистрация: 20.07.2013
Сообщений: 6,023
07.11.2014, 13:03
Для вывода модели процессора запускай программу от имени администратора.
Миниатюры
Некорректный вывод информации о системе  
0
place status here
 Аватар для gunslinger
3190 / 2227 / 640
Регистрация: 20.07.2013
Сообщений: 6,023
07.11.2014, 15:28
Лучший ответ Сообщение было отмечено BRcr как решение

Решение

Добавь строки
C++
1
2
3
4
else if (Win32MajorVersion == 6 && Win32MinorVersion == 2){
Edit2->Text = "Windows 8";   }
else if (Win32MajorVersion == 6 && Win32MinorVersion == 3){
Edit2->Text = "Windows 8.1";   }
Windows 10 = 6.4
(плюс у тебя одинаковые условия при определении Windows NT 4.0 и Windows 95, в итоге первой выбирается NT, до 95 дело никогда не дойдет, хотя сейчас это мелочи, мало кто их использует, но все же).


Что касается размеров дисков, изучи справку по функциям DiskSize и DiskFree:
DiskSize returns the size in bytes of the specified drive, where 0 = Current, 1 = A, 2 = B, and so on. DiskSize returns -1 if the drive number is invalid.
Здесь говорится о том, что возвращается размер в байтах, причем параметр 0 определяет "текущий" диск, 1 - диск A, 2 - B и так далее. Иначе возвращается -1, если номер диска задан неверно.
Ты отталкиваешься от индекса строки в комбобоксе. Не знаю насчет диска A, но диск B у тебя вряд ли присутствует.
Допустим, диска A нет (как и B), тогда можно просто добавить 3 к индексу:
C++
1
ComboBox2->ItemIndex+3;
но это не совсем верно.
По хорошему нужно сделать примерно так:
C++
1
2
3
4
  char letter = ComboBox2->Text[1];  // берем первый символ текста
  int drive = int(letter-'A')+1;  // A - английская
  Size=DiskSize(drive);
  FreeSpace=DiskFree(drive);
"Общий объем":
C++
1
2
3
4
5
6
7
8
9
10
  Size = 0;
  FreeSpace = 0;
  for (int i = 0; i < Memo1->Lines->Count; i++)
  {
    letter = Memo1->Lines->Strings[i][1];
    drive = int(letter-'A')+1;
    Size += DiskSize(drive);
    FreeSpace += DiskFree(drive);
  }
  Edit9->Text = IntToStr(Size/1024/1024) + " / " + IntToStr(FreeSpace/1024/1024);
Слева от косой черты - суммарный объем всех дисков, справа - сколько всего свободного места.




В итоге:
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
void __fastcall TForm1::ComboBox2Change(TObject *Sender)
{
 char letter;
 int drive;
 if(ComboBox2->ItemIndex>-1)
 {
  letter = ComboBox2->Text[1];  // берем первый символ текста
  drive = int(letter-'A')+1;  // A - английская
  Size=DiskSize(drive);
  FreeSpace=DiskFree(drive);
  if(Size>0)
  {
   Edit7->Text=IntToStr(Size/1024/1024);
   Edit8->Text=IntToStr(FreeSpace/1024/1024);
  }
  else
  ShowMessage("Диска нет!");  }
 
  Size = 0;
  FreeSpace = 0;
  for (int i = 0; i < Memo1->Lines->Count; i++)
  {
    letter = Memo1->Lines->Strings[i][1];
    drive = int(letter-'A')+1;
    Size += DiskSize(drive);
    FreeSpace += DiskFree(drive);
  }
  Edit9->Text = IntToStr(Size/1024/1024) + " / " + IntToStr(FreeSpace/1024/1024);
}
1
0 / 0 / 0
Регистрация: 06.11.2014
Сообщений: 13
08.11.2014, 11:16  [ТС]
спасибо всем большое. всё работает
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.11.2014, 11:16
Помогаю со студенческими работами здесь

Вывод информации о системе
Пытаюсь сделать программу которая будет выводить информацию о системе и железе, нашел вариант вывода через QSysInfo в QDebug а в label не...

Вывод информации о системе
Как на Си вывести информацию про текущую Систему(должна запускаться на Дебиане)? В частности более всего нужна версия Дебиан и 32 или 64...

Запуск системной утилиты, вывод информации о процессах в системе
Подскажите пожалуйста код, как запустить любую системную утилиту и вывести инфу о процессах в системе

Ввод числа в троичной системе и вывод в пятиричной системе
Доброго времени суток форумчане. В университете дали задание, ввести число в троичной системе и вывести в пятиричной. Немного порыскав в...

Некорректный вывод
Написать программу, которая считывает текст из файла и выводит его на экран, меняя местами каждые два соседних слова. Вот сам код,...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru