ynygu 发表于 2008-8-30 19:43:13

如何获得一个进程的cpu使用率或内存使用率

如何获得一个进程的cpu使用率或内存使用率
autoit能否实现?

[ 本帖最后由 ynygu 于 2008-8-31 07:07 编辑 ]

asdf 发表于 2008-8-30 22:14:26

内存使用率可以直接processgetstate解决
CPU占用要用wmi的process类

redapple2008 发表于 2008-8-31 00:45:07

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <ProgressConstants.au3>

Global $IDLETIME, $KERNELTIME, $USERTIME
Global $StartIdle, $StartKernel, $StartUser
Global $EndIdle, $EndKernel, $EndUser
Global $Timer

$IDLETIME   = DllStructCreate("dword;dword")
$KERNELTIME = DllStructCreate("dword;dword")
$USERTIME   = DllStructCreate("dword;dword")

$hGUI = GUICreate("CPUmon", 200, 150, -1, -1, -1, $WS_EX_TOPMOST)
GUISetIcon("shell32.dll", 13)

GUICtrlCreateLabel("Total CPU Usage:", 25, 20, 105, 20)
GUICtrlSetFont(-1, 8.5, 800, Default, "MS Sans Serif")

$ValueLabel = GUICtrlCreateLabel("", 130, 20, 40, 20)
GUICtrlSetFont(-1, 8.5, 800, Default, "MS Sans Serif")

$progress = GUICtrlCreateProgress(170, 20, 20, 120, BitOR($PBS_VERTICAL, $PBS_SMOOTH))
DllCall("UxTheme.dll", "int", "SetWindowTheme", "hwnd", GUICtrlGetHandle($progress), "wstr", "", "wstr", "")

GUISetState()

_TimerProc()

AdlibEnable("_TimerProc", 1000)

While 1
    $msg = GUIGetMsg()
    Switch $msg
      Case $GUI_EVENT_CLOSE
            ExitLoop
    EndSwitch
WEnd

Func _TimerProc()
    _GetSysTime($EndIdle, $EndKernel, $EndUser)
    _CPUCalc()
    _GetSysTime($StartIdle, $StartKernel, $StartUser)
EndFunc

Func _GetSysTime(ByRef $sIdle, ByRef $sKernel, ByRef $sUser)
    DllCall("kernel32.dll", "int", "GetSystemTimes", "ptr", DllStructGetPtr($IDLETIME), _
            "ptr", DllStructGetPtr($KERNELTIME), _
            "ptr", DllStructGetPtr($USERTIME))

    $sIdle = DllStructGetData($IDLETIME, 1)
    $sKernel = DllStructGetData($KERNELTIME, 1)
    $sUser = DllStructGetData($USERTIME, 1)
EndFunc   ;==>_GetSysTime

Func _CPUCalc()
    Local $iSystemTime, $iTotal, $iCalcIdle, $iCalcKernel, $iCalcUser
   
    $iCalcIdle   = ($EndIdle - $StartIdle)
    $iCalcKernel = ($EndKernel - $StartKernel)
    $iCalcUser   = ($EndUser - $StartUser)
   
    $iSystemTime = ($iCalcKernel + $iCalcUser)
    $iTotal = Int(($iSystemTime - $iCalcIdle) * (100 / $iSystemTime))
   
    If GUICtrlRead($ValueLabel) <> $iTotal & "%" Then
      ControlSetText($hGUI, "", $ValueLabel, $iTotal & "%")
      GUICtrlSetData($progress, $iTotal)
    EndIf
EndFunc   ;==>_CPUCalc

redapple2008 发表于 2008-8-31 00:48:07

去看看了
http://www.autoitx.com/forum.php?mod=viewthread&tid=2292&extra=page%3D3

superman 发表于 2009-9-17 11:12:51

利用wmi怎么解决的?望指点一二

lsqyx528 发表于 2010-9-10 15:04:02

可以啊。。。

andersonljw 发表于 2011-3-27 21:19:00

不错 不错 好好学习
页: [1]
查看完整版本: 如何获得一个进程的cpu使用率或内存使用率