![]() |
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - Определение количества RAM и количества видеопамяти |
|
Delphi - Определение количества RAM и количества видеопамяти
|
![]() Пользователь Сообщения: 70 |
Встала проблема в определении количества оперативки и памяти видеокарты.
Код ест, однако он не совсем верно пашет function raminfo:PChar; var MemInfo:TMemoryStatus; begin MemInfo.dwLength:=SizeOf(MemInfo); // Определяет актуальную информацию о памяти GlobalMemoryStatus(MemInfo); result:=PChar(IntToStr(MemInfo.dwTotalPhys div 1047500)+' Mb '); // высчтывает ее end; // РАМ на видюхе 2 function vidmeminfo2:PChar; var lpDisplayDevice: TDisplayDevice; a:Real; b:string; begin lpDisplayDevice.cb := sizeof(lpDisplayDevice); EnumDisplayDevices(nil, 0, lpDisplayDevice, 0); a:=(lpDisplaydevice.StateFlags div 524280); //a:=Round(Int(a)); b:=FloatToStr(a); Result:=Pchar(b+' '); end; Память видеокарты фиксировано выдает 256 Мб на любой конфигурации. Знаю что prokazzza, и Mr dUSHA как то сделали такое в WinStyle. Не знаю что делать, почти месяц стою на этой проблеме... |
|
Отправлено: 02:14, 23-12-2009 |
![]() Пользователь Сообщения: 70
|
Профиль | Отправить PM | Цитировать Admiral, насчет ключей реестр а знаю, уже думал над этим, но на разных компах {8A1E77B7-6F63-41CF-96DA-69F860EB4DDC}\0000 это значение разное.
Вот код для определения RAM (убил вчера часа 3 перепробовал массу вариантов и вариаций написания) // общий размер физической памяти function raminfo: PChar; var MemoryStatus: TMemoryStatusEx; begin //ZeroMemory(@MemoryStatus, SizeOf(TMemoryStatusEx)); MemoryStatus.dwLength := SizeOf(TMemoryStatusEx); GlobalMemoryStatusEx(MemoryStatus); Result :=PChar(IntToStr(MemoryStatus.ullTotalPhys div 5441471906132)+' Mb '); //не обращать внимания, пытался подстроить под себя if Result<>' ' then Result:=Result else Result:=PChar('Нет Данных'); end; |
Отправлено: 17:18, 24-12-2009 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 3320
|
Профиль | Отправить PM | Цитировать stasmd
Цитата:
Цитата:
Но смысла в них нет, так как в HardwareInformation.MemorySize что-то не то. |
||
Отправлено: 20:58, 25-12-2009 | #12 |
Будем жить, Маэстро... Сообщения: 6694
|
Профиль | Сайт | Отправить PM | Цитировать stasmd, Admiral, Извините что вмешиваюсь, мне когда-то Serega помогал инсталятор делать, в котором была проверка видеопамяти. Может это поможет чем-то?
![]() // Видеокарта: VideoRAMPanel.Color := $CCFFCC lpDisplayDevice.cb := SizeOf(lpDisplayDevice) DeviceKey := '' n := 0 while not (EnumDisplayDevices(0, n, lpDisplayDevice, 0) and (lpDisplayDevice.StateFlags and DISPLAY_DEVICE_PRIMARY_DEVICE > 0)) and (n < 127) do n := n + 1 for n := 0 to 127 do DeviceKey := DeviceKey + lpDisplayDevice.DeviceKey[n] Delete(DeviceKey, Pos(Chr(0), DeviceKey), 127) // Ключ драйвера получаем из API StringChange(DeviceKey, '\Registry\Machine\', '') errCode := 1 DeviceValue := 0 if RegQueryBinaryValue(HKLM, DeviceKey, 'HardwareInformation.MemorySize', DeviceName) then for n := 1 to Length(DeviceName) do begin DeviceValue := DeviceValue + Ord(DeviceName[n])*errCode errCode := errCode*$100 end else if RegQueryDWordValue(HKLM, DeviceKey, 'HardwareInformation.MemorySize', DeviceValue) then else RegQueryDWordValue(HKLM, DeviceKey + '\Info', 'VideoMemory', DeviceValue) DeviceName := '' for n := 0 to 127 do DeviceName := DeviceName + lpDisplayDevice.DeviceString[n] Delete(DeviceName, Pos(Chr(0), DeviceName), 127) if DeviceName <> '' then if DeviceValue > 0 then VideoRAMPanel.Text := ' ' + DelSp(DeviceName) + ', '+ ByteOrTB(DeviceValue/oneMB, False) else VideoRAMPanel.Text := ' ' + DelSp(DeviceName) + ' (Standard), '+ ByteOrTB(DeviceValue/oneMB, False) else begin VideoRAMPanel.Text := ' Драйвер устройства не обнаружен' VideoRAMPanel.Color := $CCCCFF ChangeText := True end if (DeviceValue/oneMB < NeedVideoRAM) then begin VideoRAMPanel.Color := $CCCCFF ChangeText := True end VideoRAMPanel.Text := VideoRAMPanel.Text + ', ' + IntToStr(GetSystemMetrics(0)) + 'x' + IntToStr(GetSystemMetrics(1)) + ' (' + IntToStr(GetDeviceCaps(CreateDC('DISPLAY','','',0),14) * GetDeviceCaps(CreateDC('DISPLAY','','',0),12)) + ' bit)' |
------- Отправлено: 21:36, 25-12-2009 | #13 |
![]() Пользователь Сообщения: 70
|
Профиль | Отправить PM | Цитировать Drongo, вроде чето есть. Проверю сайчас, спасибо.
Admiral, а что с кодом для оперативки делать? Скиньте свой для сравнения. PS Старый код без ЕХ прекрасно пашет на х64 :/ |
Отправлено: 02:06, 26-12-2009 | #14 |
Ветеран Сообщения: 3320
|
Профиль | Отправить PM | Цитировать stasmd, у меня на Си
#include <windows.h> #include <stdio.h> int wmain(int argc, wchar_t *argv[]) { MEMORYSTATUSEX Buffer = {0}; //Объявляем переменную Buffer структурного типа MEMORYSTATUSEX Buffer.dwLength = sizeof(MEMORYSTATUSEX); //Присваиваем элементу dwLength размер структуры MEMORYSTATUSEX GlobalMemoryStatusEx(&Buffer); //Вызываем функцию определяющую количество установленной на ПК памяти wprintf(L"\n%ld", Buffer.ullTotalPhys); //результат отобразить в консоли return 0; //заканчиваем работу программы } Инициализация MEMORYSTATUSEX Buffer = {0}; аналогична тому что далее будет вызвано ZeroMemmory, но в данном случаи главное заполнить dwLength перед вызовом GlobalMemoryStatusEx. |
Отправлено: 03:57, 26-12-2009 | #15 |
![]() Пользователь Сообщения: 70
|
Профиль | Отправить PM | Цитировать Вопрос - где в реестре Windows хранится значение текущей оперативной памяти? И храниться ли?
|
Отправлено: 23:21, 01-04-2010 | #16 |
Будем жить, Маэстро... Сообщения: 6694
|
Профиль | Сайт | Отправить PM | Цитировать Цитата stasmd:
|
|
------- Отправлено: 14:19, 02-04-2010 | #17 |
Ветеран Сообщения: 3320
|
Профиль | Отправить PM | Цитировать stasmd HKEY_LOCAL_MACHINE\HARDWARE\RESOURCEMAP\System Resources\Physical Memory параметр .Translated
Хранится не в десятичной системе исчесления, а в неком REG_RESOURCE_LIST. how to read REG_RESOURCE_LIST data from registry На MS How to get the Physical Memory information using Registry рекомендуют всё же прислушатся к GlobalMemoryStatus(Ex) |
Отправлено: 13:35, 05-04-2010 | #18 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
C/C++ - [решено] Определение частоты процессора, видеопамяти и др. | Virtyaluk | Программирование и базы данных | 10 | 25-03-2010 22:53 | |
Теория - Regexp-ы, определение количества совпадений | hasherfrog | Программирование и базы данных | 2 | 02-04-2009 12:11 | |
[решено] Подсчет количества папок | BlaJes | AutoIt | 4 | 10-02-2009 21:37 | |
Подсчет количества лицензий. | Zergling | Microsoft Windows NT/2000/2003 | 0 | 24-04-2007 14:57 | |
Настройка количества пользователей в Win XP HE | wwwSerg | Сетевые технологии | 4 | 12-05-2004 14:55 |
|