Что нового

Определить объем памяти

Scampy

Новичок
Сообщения
54
Репутация
0
Доброго времени суток!
Имеется код:
Код:
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Include <Constants.au3>

$Form1 = GUICreate("Form1", 200, 200, 192, 124)
$Label1 = GUICtrlCreateLabel("RAM:", 50, 50, 36, 17)
$Label2 = GUICtrlCreateLabel("", 80, 50, 36, 17)

$RAM = MemGetStats()
$RAMsize = ( Round ($RAM[1] / 1024000, 0) & " Gb")
GUICtrlSetData($Label2, $RAMsize)

GUISetState(@SW_SHOW)

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit


	EndSwitch
WEnd


Подскажите пожалуйста, как определить полный объем установленной памяти если ее более 4 Гб, а разрядность ОС 32 бита? Если 32 бита и меньше 4 Гб или 64 бита - то проблем конечно нет.
Спасибо
 

InnI

AutoIT Гуру
Сообщения
4,958
Репутация
1,448
Scampy
определить полный объем установленной памяти
Можно посчитать по слотам
Код:
$objService = ObjGet("winmgmts:{impersonationLevel=impersonate}!\\.\root\CIMV2")
If IsObj($objService) Then
  For $objPhMem In $objService.ExecQuery("SELECT * FROM Win32_PhysicalMemory")
    ConsoleWrite("Слот: " & $objPhMem.DeviceLocator & @CRLF)
    ConsoleWrite("Размер, байт: " & $objPhMem.Capacity & @CRLF)
  Next
Else
  ConsoleWrite("Ошибка создания объекта" & @CRLF)
EndIf
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Или так.
Код:
#include<WinAPIEx.au3>

$aMemory = _WinAPI_GlobalMemoryStatus()
ConsoleWrite(StringFormat("Total %d Mb of physical memory.\n", $aMemory[1]/1048576))
 

InnI

AutoIT Гуру
Сообщения
4,958
Репутация
1,448
Garrett
Здесь такая же проблема: из-под 32-разрядной показывает менее четырёх, хотя установлено больше.
Причём, функция возвращает доступную память, а Scampy, я так понял, хочет "всего".
 
Автор
S

Scampy

Новичок
Сообщения
54
Репутация
0
InnI сказал(а):
Можно посчитать по слотам
Да, единственный вариант похоже считать по слотам.
Это как я понял для первого слота памяти... а для остальных как не соображу
 

InnI

AutoIT Гуру
Сообщения
4,958
Репутация
1,448
Scampy
как я понял для первого слота
У меня на Win7x86 перечисляются и выводятся в консоль все слоты, в которые установлены модули памяти.
Код:
Слот: ChannelA-DIMM0
Размер, байт: 2147483648
Слот: ChannelA-DIMM1
Размер, байт: 2147483648
Слот: ChannelB-DIMM0
Размер, байт: 2147483648
Слот: ChannelB-DIMM1
Размер, байт: 2147483648
 
Автор
S

Scampy

Новичок
Сообщения
54
Репутация
0
InnI сказал(а):
У меня на Win7x86 перечисляются и выводятся в консоль все слоты, в которые установлены модули памяти.
Сразу все? Или по отдельности друг за другом окна? По отдельности мне выдаёт все слоты... а вот как сделать чтоб одновременно в Label они все были видны?
 

edyapd

Осваивающий
Сообщения
380
Репутация
30
Scampy сказал(а):
.. а вот как сделать чтоб одновременно в Label они все были видны?
Такое ощущение, что вы вообще не знакомы с программированием.
Код:
; Создайте пустую строковую переменную перед циклом
$sMem = ''
; А потом в цикле соединяйте строки
$sMem &= $sMem & здесь то, что требуется прицепить & @LF
; И по окончании цикла выводите её на экран
 

InnI

AutoIT Гуру
Сообщения
4,958
Репутация
1,448
Scampy
чтоб одновременно
Код:
$objService = ObjGet("winmgmts:{impersonationLevel=impersonate}!\\.\root\CIMV2")
$Total = 0
If IsObj($objService) Then
  For $objPhMem In $objService.ExecQuery("SELECT * FROM Win32_PhysicalMemory")
    $Total = $Total + $objPhMem.Capacity
  Next
Else
  ConsoleWrite("Ошибка создания объекта" & @CRLF)
EndIf
MsgBox(0, "Total", $Total & " байт")
 
Верх