找回密码
 加入
搜索
查看: 2058|回复: 3

[系统综合] [已解决]请高手改进一下3smile代码 直接输出 实际内存总数

  [复制链接]
发表于 2011-10-2 10:17:39 | 显示全部楼层 |阅读模式
本帖最后由 elexy 于 2011-10-10 08:39 编辑

本段代码为 三笑 所写,为了解决32位系统发现不了 4G内存的问题,可这段代码输出的数组列表,能不能改一下,不要输出数组,输出一个变量,无论安装了多少内存,都将容量累加在一起。小弟水平有限,改不好。
#include <array.au3>
$x=getmem()
_ArrayDisplay($x)
Func getmem()
$wbemFlagReturnImmediately = 0x10
$wbemFlagForwardOnly = 0x20
$colItems = ""
$strComputer = "localhost"
$Output=""
$objWMIService = ObjGet("winmgmts:\" & $strComputer & "\root\CIMV2")
$colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_PhysicalMemory", "WQL", _
                                          $wbemFlagReturnImmediately + $wbemFlagForwardOnly)        
If IsObj($colItems) then
        Local $mem[1][2],$k=1
   For $objItem In $colItems
          ReDim $mem[$k+1][2]
          $output=Execute($objItem.Capacity)
          $mem[$k][0]=$objItem.BankLabel
          $mem[$k][1]=$output     
          $k+=1
  Next
  $mem[0][0]=UBound($mem)-1
Return $mem  
Else
   Msgbox(0,"WMI Output","No WMI Objects Found for class: " & "Win32_PhysicalMemory" )
Endif
EndFunc
发表于 2011-10-2 10:55:19 | 显示全部楼层
本段代码为 三笑 所写,为了解决32位系统发现不了 4G内存的问题,可这段代码输出的数组列表,能不能改一下, ...
elexy 发表于 2011-10-2 10:17


不会吧?加个循环就解决了呀

#include <array.au3>
$x = getmem()
MsgBox(0, 0, $x)
Func getmem()
        $wbemFlagReturnImmediately = 0x10
        $wbemFlagForwardOnly = 0x20
        $colItems = ""
        $strComputer = "localhost"
        $Output = ""
        $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
        $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_PhysicalMemory", "WQL", _
                        $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
        If IsObj($colItems) Then
                Local $mem[1][2], $k = 1, $Count = 0
                For $objItem In $colItems
                        ReDim $mem[$k + 1][2]
                        $Output = Execute($objItem.Capacity)
                        $mem[$k][0] = $objItem.BankLabel
                        $mem[$k][1] = $Output
                        $k += 1
                Next
                $mem[0][0] = UBound($mem) - 1
                For $i = 0 To UBound($mem) - 1
                        $Count += $mem[$i][1]
                Next
                Return $Count
        Else
                MsgBox(0, "WMI Output", "No WMI Objects Found for class: " & "Win32_PhysicalMemory")
        EndIf
EndFunc   ;==>getmem
发表于 2011-10-2 12:12:01 | 显示全部楼层
32位, >4g内存,读得出来?别说wmi,api里没函数支持
发表于 2011-10-2 17:46:35 | 显示全部楼层
没有研究,好象win7 32位的可以,xp目前还没有相应的工具出世!
发表于 2011-10-2 18:31:23 | 显示全部楼层
本帖最后由 netegg 于 2011-10-2 18:40 编辑

不管是什么系统,32位的寻址空间就到不了4g.
看下 http://blog.csdn.net/politefish/article/details/4592176 说的明白点
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-6 09:54 , Processed in 0.073143 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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