pcguru000 Posted August 28, 2008 Share Posted August 28, 2008 Im trying to make a little vertical progress bar that will show the current CPU Usage, this is what I have right now. Global $wbemFlagReturnImmediately = 0x10 Global $wbemFlagForwardOnly = 0x20 Global $wbemFlags = $wbemFlagReturnImmediately + $wbemFlagForwardOnly Global $strComputer = @ComputerName $hGUI = GUICreate("CPUmon", 200, 200, -1, -1, -1) $CPU = GUICtrlCreateProgress(130, 20, 64, 64,0x04) GUISetState(@SW_SHOW, $hGUI) $sMsg = "" while 1 Global $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2") Global $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_Processor", "WQL", $wbemFlags) For $objItem In $colItems $sMsg = $objItem.LoadPercentage Next sleep(1000) GUICtrlSetData($CPU, $sMsg) wend I really want to get a steady update (perhaps every half second)... What exactly is making this freeze each time it updates ( I loose control of the close button ect aswell) Is doesnt seem to be the "sleep(1000)" - I think it something to do w/ this: Global $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2") Global $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_Processor", "WQL", $wbemFlags) But why? How do I smooth this out? Is there away I could just use the control that the default windows TaskManager uses...? If so how? THANKS! Link to comment Share on other sites More sharing options...
Monamo Posted August 28, 2008 Share Posted August 28, 2008 (edited) Im trying to make a little vertical progress bar that will show the current CPU Usage, this is what I have right now. Global $wbemFlagReturnImmediately = 0x10 Global $wbemFlagForwardOnly = 0x20 Global $wbemFlags = $wbemFlagReturnImmediately + $wbemFlagForwardOnly Global $strComputer = @ComputerName $hGUI = GUICreate("CPUmon", 200, 200, -1, -1, -1) $CPU = GUICtrlCreateProgress(130, 20, 64, 64,0x04) GUISetState(@SW_SHOW, $hGUI) $sMsg = "" while 1 Global $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2") Global $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_Processor", "WQL", $wbemFlags) For $objItem In $colItems $sMsg = $objItem.LoadPercentage Next sleep(1000) GUICtrlSetData($CPU, $sMsg) wend I really want to get a steady update (perhaps every half second)... What exactly is making this freeze each time it updates ( I loose control of the close button ect aswell) Is doesnt seem to be the "sleep(1000)" - I think it something to do w/ this: Global $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2") Global $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_Processor", "WQL", $wbemFlags) But why? How do I smooth this out? Is there away I could just use the control that the default windows TaskManager uses...? If so how? THANKS!<!--QuoteEnd--></div><!--QuoteEEnd--> The close button isn't working because you haven't assigned an event to handle it being clicked. As for the progress bar appearing to "freeze" on you, I saw the same thing with your progress bar dimensions. However, by making the progress bar considerably more narrow, I was seeing the status changes. Mildly tested example: AutoItSetOption("GuiOnEventMode",1) Global $wbemFlagReturnImmediately = 0x10 Global $wbemFlagForwardOnly = 0x20 Global $wbemFlags = $wbemFlagReturnImmediately + $wbemFlagForwardOnly Global $strComputer = @ComputerName Global $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2") $hGUI = GUICreate("CPUmon", 200, 200, -1, -1, -1) $CPU = GUICtrlCreateProgress(130, 20, 10, 120, 0x04) $labelCPU = GUICtrlCreateLabel("",150,20,30,20,0x1000) GUISetState(@SW_SHOW, $hGUI) GUISetOnEvent(-3,"_ExitIt") $sMsg = "" While 1 Global $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_Processor", "WQL", $wbemFlags) For $objItem In $colItems $sMsg = $objItem.LoadPercentage Next GUICtrlSetData($CPU, $sMsg) GUICtrlSetData($labelCPU,$sMsg &"%") Sleep(10) WEnd Func _ExitIt() Exit EndFunc Edited August 28, 2008 by Monamo - MoChr(77)& Chr(97)& Chr(100)& Chr(101)& Chr(32)& Chr(121)& Chr(97)& Chr(32)& Chr(108)& Chr(111)& Chr(111)& Chr(107)-------I've told you 100,000 times not to exaggerate!-------Don't make me hit you with my cigarette hand...-------My scripts:Random Episode Selector, Keyboard MouseMover, CopyPath v2.1, SmartRename for XP,Window Tracer[sup]New![/sup] Link to comment Share on other sites More sharing options...
pcguru000 Posted August 28, 2008 Author Share Posted August 28, 2008 Still locking my whole GUI... for instance take that script... throw a button on it and try clicking the button everything is locking up - almost as if the CPU was being over used but... its not .. its something in the loop I think but I cant seem to figure it... Is there another way to get CPU usage? PS Thanks 4 the comment on the progress bar - that does help viewing it... too bad this still messing things up :/ Link to comment Share on other sites More sharing options...
rasim Posted August 29, 2008 Share Posted August 29, 2008 pcguru000Welcome to the forum. Please in next time don't post your question in the PM and Example Scripts forum. Quick example:expandcollapse popup#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 Link to comment Share on other sites More sharing options...
pcguru000 Posted August 30, 2008 Author Share Posted August 30, 2008 Indeed I got your script working Rasim THANK YOU you are awesome. I will post my questions elsewhere thanks again -brendon Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now