无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 6441|回复: 8
打印 上一主题 下一主题

怎样在PE下获取系统物理内存总数和当前可用内存数?

[复制链接]
跳转到指定楼层
1#
发表于 2011-7-24 06:42:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
怎样自动把任务管理器获取的

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 编辑 ]
2#
发表于 2011-7-24 11:36:46 | 只看该作者

回复 #1 chiannet 的帖子

我也在找这个,我刚才初步写了个程序,发现有点问题,大于2G内存的电脑,获得的"物理内存总量"始终是2G,我就采取其他的办法处理了一下,先测试下,如果没什么问题我就加到fbinst plus中。
(2G以上内存的问题已经纠正)

使用方法:



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

mem.zip

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

修正版

回复

使用道具 举报

3#
发表于 2011-7-24 12:19:51 | 只看该作者

回复 #2 Plantsoot 的帖子

GlobalMemoryStatusEx

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

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

[ 本帖最后由 2011我叫莫尛沫 于 2011-7-24 12:25 编辑 ]
回复

使用道具 举报

4#
发表于 2011-7-24 14:02:36 | 只看该作者

回复 #3 2011我叫莫尛沫 的帖子

多谢提示,我对API不熟悉,经您的指点现在已经修正了不能读取大于2G内存的问题。
我那个算法不太科学,是:

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

算出来的和真实的接近。

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

点评

请用fbinst plus fbinst --meminfo : 获取物理内存信息 fbinst --meminfo 获取物理内存信息 fbinst --meminfo-t 获取物理内存总大小,返回值DOS下通过读取%errorlevel%来获取,  详情 回复 发表于 2016-12-19 10:18
刚才测试了,8G (8112)的内存,这个程序运行说是 4016MB,有问题,请修复!  发表于 2016-11-26 17:53
回复

使用道具 举报

5#
发表于 2011-7-24 14:35:18 | 只看该作者
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
─────────────────────
回复

使用道具 举报

6#
 楼主| 发表于 2011-7-24 15:22:49 | 只看该作者

回复 #5 liuhj 的帖子

这个不错,PSTAT.EXE也也很袖珍
回复

使用道具 举报

7#
发表于 2011-7-24 15:53:22 | 只看该作者
PSTAT.EXE 确实很袖珍,才 8K 。呵呵。
回复

使用道具 举报

8#
发表于 2016-12-19 10:18:52 | 只看该作者
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
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2025-2-23 21:48

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表