无忧启动论坛

标题: 怎样在PE下获取系统物理内存总数和当前可用内存数? [打印本页]

作者: chiannet    时间: 2011-7-24 06:42
标题: 怎样在PE下获取系统物理内存总数和当前可用内存数?
怎样自动把任务管理器获取的

1、系统物理内存总数
2、当前可用内存数

这些参数赋值给变量a,b?


或不用任务管理器,其它的程序探测的上述参数赋值给a、b也行。



systeminfo.exe需要额外的DLL支持,一般pe里都精简了,还有没有更简单的方式?

systeminfo|find "物理内存总量" >c:\%computername%.txt
systeminfo|find "可用的物理内存" >>c:\%computername%.txt
echo %date%%time% >>c:\%computername%.txt

[ 本帖最后由 chiannet 于 2011-7-24 08:02 编辑 ]
作者: Plantsoot    时间: 2011-7-24 11:36
标题: 回复 #1 chiannet 的帖子
我也在找这个,我刚才初步写了个程序,发现有点问题,大于2G内存的电脑,获得的"物理内存总量"始终是2G,我就采取其他的办法处理了一下,先测试下,如果没什么问题我就加到fbinst plus中。
(2G以上内存的问题已经纠正)

使用方法:



[ 本帖最后由 Plantsoot 于 2011-7-24 15:51 编辑 ]

mem.zip

5.45 KB, 下载次数: 58, 下载积分: 无忧币 -2

修正版


作者: 2011我叫莫尛沫    时间: 2011-7-24 12:19
标题: 回复 #2 Plantsoot 的帖子
GlobalMemoryStatusEx

http://flyxxtt.blogbus.com/logs/42903497.html

我倒想知道你另一个方法是什么..额= =无忧好像对CHROME支持不善啊!

[ 本帖最后由 2011我叫莫尛沫 于 2011-7-24 12:25 编辑 ]
作者: Plantsoot    时间: 2011-7-24 14:02
标题: 回复 #3 2011我叫莫尛沫 的帖子
多谢提示,我对API不熟悉,经您的指点现在已经修正了不能读取大于2G内存的问题。
我那个算法不太科学,是:

物理内存总量 = 可用物理内存/(100% - 已用内存所占百分比)

算出来的和真实的接近。

[ 本帖最后由 Plantsoot 于 2011-7-24 14:19 编辑 ]
作者: liuhj    时间: 2011-7-24 14:35
systeminfo.exe运行可能需要WMI组件支持。


下面一段批处理是我的PE用的。大意是:当可用内存低于500MB时,在可用空间最大的硬盘分区设置虚拟内存页面文件,下限值为总内存的1.5倍,上限值为总内存的3倍。

其中:
PSTAT.EXE为XP安装盘支持工具包中的一个程序,可以获取当前系统的总内存和可用内存。
SETPAGEFILE.EXE是常用的设置虚拟页面的程序。
变量%TOTALRAM%为总内存
变量%FREERAM%为可用内存
变量%DHOST%为可用空间最大的硬盘分区,由另外的一段批处理获得。
─────────────────────
SETLOCAL ENABLEDELAYEDEXPANSION
SET AMEM=
SET TMEM=
FOR /F "USEBACKQ TOKENS=2,4 DELIMS=: " %%I IN (`PSTAT.EXE ^| FIND /I "Avail:"`) DO (
        SET TMEM=%%I
        SET AMEM=%%J
)
SET /A TOTALRAM=%TMEM:~0,-1%/1024
SET /A FREERAM=%AMEM:~0,-1%/1024
IF %FREERAM% LEQ 500 (
        SET /A MINP=%TOTALRAM%*3/2
        SET /A MAXP=%TOTALRAM%*3
        SETPAGEFILE.EXE %DHOST%\pagefile.sys !MINP! !MAXP!
)
ENDLOCAL
─────────────────────
作者: chiannet    时间: 2011-7-24 15:22
标题: 回复 #5 liuhj 的帖子
这个不错,PSTAT.EXE也也很袖珍
作者: Plantsoot    时间: 2011-7-24 15:53
PSTAT.EXE 确实很袖珍,才 8K 。呵呵。
作者: Plantsoot    时间: 2016-12-19 10:18
Plantsoot 发表于 2011-7-24 14:02
多谢提示,我对API不熟悉,经您的指点现在已经修正了不能读取大于2G内存的问题。
我那个算法不太科学,是 ...

请用fbinst plus
fbinst --meminfo :  获取物理内存信息
            fbinst --meminfo       获取物理内存信息
            fbinst --meminfo-t    获取物理内存总大小,返回值DOS下通过读取%errorlevel%来获取,单位M
             fbinst --meminfo-f    获取可用物理内存大小,返回值DOS下通过读取%errorlevel%来获取,单位M





欢迎光临 无忧启动论坛 (http://bbs.wuyou.net/) Powered by Discuz! X3.3