Вверх ↑
Этот топик читают: Гость
Ответов: 582
Рейтинг: 3
#1: 2010-05-17 19:41:15 ЛС | профиль | цитата
у меня прога пишет что у меня 2 гб оперативки хотя у меня 4 передал другу у него такая же фигня испытывал на 7 и висте тоже в основном определяет неправильно
карма: 0

0
vip
#1.1контекстная реклама от партнеров
Ответов: 5446
Рейтинг: 323
#2: 2010-05-17 19:42:13 ЛС | профиль | цитата
ruzik, потому что не-64битные ОС не могут увидеть все 4 Гб
карма: 1

0
Ответов: 970
Рейтинг: 270
#3: 2010-05-17 19:42:31 ЛС | профиль | цитата
ОС 64-битная?

[offtop]iarspider опередил[/offtop]
карма: 0

0
Ответов: 1161
Рейтинг: 160
#4: 2010-05-17 19:47:09 ЛС | профиль | цитата
Genius писал(а):
ОС 64-битная?

Походу нет...
карма: 0

0
Ответов: 1841
Рейтинг: 369
#5: 2010-05-17 20:14:05 ЛС | профиль | цитата
хм, так почему 2 гб а не 3.25 гб видит?
карма: 1
0
Ответов: 582
Рейтинг: 3
#6: 2010-05-17 20:20:45 ЛС | профиль | цитата
нет ось 32 битная но может подскажите как исправить это
карма: 0

0
Ответов: 970
Рейтинг: 270
#7: 2010-05-17 20:26:34 ЛС | профиль | цитата
Так

code_18328.txt
карма: 0

0
файлы: 1code_18328.txt [978B] [595]
Разработчик
Ответов: 26061
Рейтинг: 2120
#8: 2010-05-17 21:11:55 ЛС | профиль | цитата
А в чем проблема-то См. аттач


карма: 22

1
файлы: 1memorystatus.sha [6.1KB] [526]
Голосовали:CriDos
Ответов: 70
Рейтинг: 1
#9: 2019-12-07 23:38:39 ЛС | профиль | цитата
Напишу здесь. Здравствуйте.
Я так и не смог решить проблему сам, потому обращаюсь за помощью. Часто использую всякого рода WinPE (оооооооочень урезанная Windows).
Иногда нужно быстро определить сколько оперативной памяти есть в компьютере.
Я написал в Hiasm программу, которая определяет размер ОЗУ всеми мной найденными в Hiasm способами.
Если система (или WinPE) х64 - моя программа справляется отлично. Если же х86 - размер памяти показывает классические "до 4 ГБ"
В урезанных WinPE часто убирают WMIC - единственный метод, который давал моему приложению определить весь размер ОЗУ независимо от разрядности.

Насоветуйте компонент, способ, инструмент, решение, которое позволит нащупать весь размер оперативной памяти, способом, который не будет зависеть от WMIC. Пробовал найти ОЗУ через список всех устройство компьютера, но ОЗУ там не выводится, видимо.

Make(delphi)
ver(4.05 build 186)
Add(MainForm,1705260,105,308)
{
Width=100
Height=66
Ctl3D=0
WinStyle=4
Caption="RAM"
BorderStyle=6
ClientSize=0
Position=1
link(onCreate,14910828:doEvent1,[])
}
Add(MemoryInfo,2297200,364,154)
{
Point(DataWidth)
Point(FormFactor)
Point(Manufacturer)
Point(MemoryType)
Point(Model)
Point(Speed)
Point(Tag)
Point(SerialNumber)
Point(Version)
link(onInfo,3413619:doAdd,[(470,160)(470,141)(283,141)(283,216)])
}
Add(MT_AddData,3413619,364,210)
{
Count=13
link(onAdd,2195962:doEnum,[])
link(Data3,2297200:Capacity,[])
}
Add(MT_Enum,2195962,504,210)
{
link(onItem,16506621:doCalc,[])
}
Add(FastMathParse,16506621,595,210)
{
MathStr="%1 + %2"
link(onResult,7994889:doValue,[])
link(X2,7994889:Value,[(608,198)(640,198)(640,254)(671,254)])
}
Add(Memory,7994889,665,210)
{
Default=Integer(0)
link(onData,4009740:doOperation,[])
}
Add(Timer,8057500,7,322)
{
AutoStop=10
Point(onStop)
link(onStop,8809680:doEvent1,[])
}
Add(Hub,6497488,196,196)
{
link(onEvent1,7994889:doClear,[(399,202)(399,223)])
link(onEvent2,2297200:doInfo,[(248,209)(248,160)])
}
Add(Math,4009740,728,210)
{
OpType=7
Op2=1048576
link(onResult,3703034:doEvent1,[])
}
Add(Hub,3703034,777,210)
{
link(onEvent1,14391606:doEvent1,[])
link(onEvent2,1705260:doCaption,[(823,223)(823,271)(72,271)(72,314)])
}
Add(StyleXP,5828762,315,56)
{
}
Add(Label,7657303,896,210)
{
Top=24
Width=100
Height=22
Color=16711680
Font=[Lucida Console,16,0,0,204]
Transparent=0
Caption=""
AutoSize=1
Alignment=2
link(Text,4009740:Result,[(902,198)(818,198)(818,254)(734,254)])
}
Add(Application,5620354,931,301)
{
Point(doInfo)
}
Add(Hub,14391606,847,210)
{
link(onEvent2,5620354:doInfo,[(875,223)(875,314)])
}
Add(Button,1226204,14,371)
{
Left=100
Top=100
DefaultBtn=0
link(onClick,8809680:doEvent2,[(58,377)(58,342)])
}
Add(Hub,8809680,84,329)
{
InCount=2
OutCount=1
link(onEvent1,1705260:doClose,[])
}
Add(MemoryStatus,13996645,490,315)
{
Scale=2
}
Add(Hub,6397457,406,322)
{
link(onEvent1,13996645:Refresh,[(455,328)(455,321)])
link(onEvent2,16681703:doData,[(476,335)(476,377)])
}
Add(DoData,16681703,553,371)
{
link(onEventData,9834857:doText,[])
link(Data,13996645:RAM,[(559,359)(496,359)])
}
Add(Timer,11952897,308,322)
{
Interval=2000
AutoStop=1
link(onTimer,6397457:doEvent1,[])
}
Add(InlineCode,13511379,497,98)
{
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|21:uses kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|0:|5: end;|0:|14:implementation|0:|4:end.|0:|
}
Add(MT_MultiData,4464888,252,518)
{
Count=10
Point(Data)
Point(RemaindData)
link(onData2,10669529:doText,[])
link(Data,11692057:MemoryInfo,[])
}
Add(DefragMemory,11692057,252,441)
{
Point(doDimension)
}
Add(Timer,13707807,833,119)
{
AutoStop=1
link(onTimer,7657303:doText,[(881,125)(881,216)])
}
Add(Hub,14910828,147,322)
{
link(onEvent1,6497488:doEvent1,[(165,328)(165,202)])
link(onEvent2,4464888:doSeparateMT,[(165,335)(165,524)])
}
Add(Label,10669529,315,525)
{
Top=2
Width=100
Height=22
Color=16777215
Font=[Lucida Console,16,0,0,204]
Transparent=0
Caption=""
AutoSize=1
Alignment=2
}
Add(Label,9834857,616,371)
{
Top=46
Width=100
Height=22
Color=255
Font=[Lucida Console,16,0,0,204]
Transparent=0
Caption=""
AutoSize=1
Alignment=2
}


Редактировалось 1 раз(а), последний 2019-12-07 23:39:41
карма: 0

0
Ответов: 4621
Рейтинг: 746
#10: 2019-12-09 12:57:31 ЛС | профиль | цитата
Что, компонент MemoryStatus тоже не показывает? Надо только поставить Scale <> Byte. (А, не, больше 4 Гб все равно не покажет).

Тогда это точно работает:
Add(MainForm,2953706,21,105)
{
Caption="Memory info"
Position=1
}
Add(Button,10504036,217,203)
{
Left=15
Top=10
Caption="Get info"
link(onClick,14624672:doEvent1,[])
}
Add(InlineCode,11970995,301,203)
{
WorkPoints=#17:doGetInstalledMem|14:doGetMemStatus|
EventPoints=#14:onInstalledMem|8:onStatus|13:onErrorStatus|
VarPoints=#10:MemoryLoad|9:TotalPhys|9:AvailPhys|13:TotalPageFile|13:AvailPageFile|12:TotalVirtual|12:AvailVirtual|
DataPoints=#5:Data1|5:Data2|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|4:uses|29: Windows, KOL, Share, Debug;|0:|0:|4:type|17: UInt64 = Int64;|2: |2: |33: TMemoryStatusEx = packed record|20: dwLength: DWord;|24: dwMemoryLoad: DWord;|25: ullTotalPhys: UInt64;|25: ullAvailPhys: UInt64;|29: ullTotalPageFile: UInt64;|29: ullAvailPageFile: UInt64;|28: ullTotalVirtual: UInt64;|28: ullAvailVirtual: UInt64;|36: ullAvailExtendedVirtual: UInt64;|6: end;|37: PMemoryStatusEx = ^TMemoryStatusEx;|0:|0:|29: THiAsmClass = class(TDebug)|11: private|34: FMemStatus: TMemoryStatusEx;|10: public|30: Data1, Data2: THI_Event;|32: onInstalledMem: THI_Event;|26: onStatus: THI_Event;|34: onErrorStatus: THI_Event; |65: procedure doGetInstalledMem(var _Data: TData; Index: Word);|62: procedure doGetMemStatus(var _Data: TData; Index: Word);|6: |58: procedure MemoryLoad(var _Data: TData; Index: Word);|57: procedure TotalPhys(var _Data: TData; Index: Word);|57: procedure AvailPhys(var _Data: TData; Index: Word);|61: procedure TotalPageFile(var _Data: TData; Index: Word);|61: procedure AvailPageFile(var _Data: TData; Index: Word);|60: procedure TotalVirtual(var _Data: TData; Index: Word);|60: procedure AvailVirtual(var _Data: TData; Index: Word);|6: end;|2: |106: function GlobalMemoryStatusEx(var lpBuffer: TMemoryStatusEx): Boolean; stdcall; external 'kernel32.dll';|2: |3:var|100: GetPhysicallyInstalledSystemMemory: function(var TotalMemoryInKilobytes: Int64): Boolean; stdcall;|0:|0:|0:|0:|0:|0:|0:|14:implementation|0:|0:|0:|0:|0:|0:|0:|71:procedure THiAsmClass.doGetInstalledMem(var _Data: TData; Index: Word);|3:var|13: Mem: Int64;|10: R: Real;|5:begin|12: Mem := -1;|2: |54: if Assigned(GetPhysicallyInstalledSystemMemory) then|44: GetPhysicallyInstalledSystemMemory(Mem);|11: R := Mem;|2: |45: _hi_CreateEvent(_Data, @onInstalledMem, R);|4:end;|0:|0:|69:procedure THiAsmClass.doGetMemStatus(var _Data: TData; Index: Word); |3:var|10: R: Real;|5:begin|49: FMemStatus.dwLength := SizeOf(TMemoryStatusEx);|42: if GlobalMemoryStatusEx(FMemStatus) then|7: begin|33: R := FMemStatus.ullTotalPhys;|43: _hi_CreateEvent(_Data, @onStatus, R); |5: end|6: else|68: _hi_CreateEvent(_Data, @onErrorStatus, Integer(GetLastError)); |2: |4:end;|0:|0:|64:procedure THiAsmClass.MemoryLoad(var _Data: TData; Index: Word);|5:begin|53: dtInteger(_Data, Integer(FMemStatus.dwMemoryLoad));|4:end;|0:|63:procedure THiAsmClass.TotalPhys(var _Data: TData; Index: Word);|3:var|10: R: Real;|5:begin|31: R := FMemStatus.ullTotalPhys;|19: dtReal(_Data, R);|4:end;|1: |63:procedure THiAsmClass.AvailPhys(var _Data: TData; Index: Word);|3:var|10: R: Real;|5:begin|31: R := FMemStatus.ullAvailPhys;|19: dtReal(_Data, R);|4:end;|0:|67:procedure THiAsmClass.TotalPageFile(var _Data: TData; Index: Word);|3:var|10: R: Real;|5:begin|35: R := FMemStatus.ullTotalPageFile;|19: dtReal(_Data, R);|4:end;|0:|67:procedure THiAsmClass.AvailPageFile(var _Data: TData; Index: Word);|3:var|10: R: Real;|5:begin|35: R := FMemStatus.ullAvailPageFile;|19: dtReal(_Data, R);|4:end;|0:|66:procedure THiAsmClass.TotalVirtual(var _Data: TData; Index: Word);|3:var|10: R: Real;|5:begin|34: R := FMemStatus.ullTotalVirtual;|19: dtReal(_Data, R);|4:end;|0:|66:procedure THiAsmClass.AvailVirtual(var _Data: TData; Index: Word);|3:var|10: R: Real;|5:begin|34: R := FMemStatus.ullAvailVirtual;|19: dtReal(_Data, R);|4:end;|0:|0:|0:|0:|22:procedure PrepareFunc;|3:var|16: hDLL: THandle;|5:begin|38: hDLL := LoadLibrary('kernel32.dll');|19: if hDLL <> 0 then|7: begin|42: GetPhysicallyInstalledSystemMemory := |65: GetProcAddress(hDLL, 'GetPhysicallyInstalledSystemMemory');|6: end;|4:end;|0:|14:initialization|14: PrepareFunc;|0:|4:end.|
link(onInstalledMem,8042298:doStrCat,[])
link(onStatus,2671137:doString,[(382,216)(382,245)(289,245)(289,272)])
}
Add(Label,3038234,462,203)
{
Left=15
Top=40
Width=85
Height=17
Caption="Installed memory:"
}
Add(Label,4512740,392,266)
{
Left=15
Top=70
Width=160
Height=130
Caption="Memory status:"
AutoSize=1
}
Add(Hub,14624672,266,203)
{
link(onEvent1,11970995:doGetInstalledMem,[])
link(onEvent2,11970995:doGetMemStatus,[])
}
Add(StrCat,8042298,420,203)
{
Str1="Installed memory (KB): "
link(onStrCat,3038234:doText,[])
}
Add(FormatStr,2671137,301,266)
{
DataCount=7
Mask="Memory status:\r\n\r\nMemoryLoad: %1\r\nTotalPhys: %2\r\nAvailPhys: %3 \r\nTotalPageFile: %4\r\nAvailPageFile: %5\r\nTotalVirtual: %6\r\nAvailVirtual: %7"
link(onFString,4512740:doText,[])
link(Str1,11970995:MemoryLoad,[])
link(Str2,11970995:TotalPhys,[])
link(Str3,11970995:AvailPhys,[])
link(Str4,11970995:TotalPageFile,[])
link(Str5,11970995:AvailPageFile,[])
link(Str6,11970995:TotalVirtual,[])
link(Str7,11970995:AvailVirtual,[])
}
doGetMemStatus - работает по похожему принципу что и MemoryStatus. Предлагаю переделать по моему IC + более адекватные имена нижним точкам дать.
doGetInstalledMem - работает только на Windows Vista и более новых.

Редактировалось 5 раз(а), последний 2019-12-09 13:01:57
карма: 26

0
Разработчик
Ответов: 26061
Рейтинг: 2120
#11: 2019-12-09 13:54:34 ЛС | профиль | цитата
Есть еще один компонент -- DefragMemory и его нижняя точка MemoryInfo. Он использует API-функцию ядра -- GlobalMemoryStatusEx, поддерживаются и байты, и килобайты и мегабайты.
Собственно, эта же функция используется и у Netspirit-a в его примере. Но DefragMemory штатный компонент и не нужно никакое IC.

Редактировалось 1 раз(а), последний 2019-12-09 13:57:20
карма: 22

0
Ответов: 4621
Рейтинг: 746
#12: 2019-12-09 15:39:51 ЛС | профиль | цитата
Ну, как бы искать "объем памяти" в DefragMemory, а не в MemoryStatus - это весьма... хм, нелогично.
карма: 26

0
Разработчик
Ответов: 26061
Рейтинг: 2120
#13: 2019-12-09 16:49:35 ЛС | профиль | цитата
Netspirit писал(а):
Ну, как бы искать "объем памяти" в DefragMemory, а не в MemoryStatus - это весьма... хм, нелогично.

Это была допфича в этом компоненте. Я просто констатировал тот факт, что она там есть.

Редактировалось 1 раз(а), последний 2019-12-09 16:50:01
карма: 22

0
Ответов: 70
Рейтинг: 1
#14: 2019-12-09 17:29:39 ЛС | профиль | цитата
nesco, в моём примере использована DefragMemory - она не показывала у меня весь объем, возможно я вас не так понял.
Netspirit, спасибо огромное! Сейчас отпишусь о результате. Да. Самый первый вывод (Installed Memory) Отобразил верные данные. Прочие же точки дали "ДО 4 ГБ". Спасибо большое!

Редактировалось 1 раз(а), последний 2019-12-09 17:38:41
карма: 0

0
Ответов: 4621
Рейтинг: 746
#15: 2019-12-09 18:21:51 ЛС | профиль | цитата
MBTY писал(а):
Прочие же точки дали "ДО 4 ГБ"


А почему у меня всё показывает? (По виртуальной памяти - вероятно, так и должно быть).



Редактировалось 3 раз(а), последний 2019-12-09 18:25:35
карма: 26

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)