oo0oo Posted July 10, 2011 Posted July 10, 2011 (edited) I use norton ghost explorer to extract files from Image, autoit how to determine the procedures have been completed, and then do another task or(restart/shutdown).I mean when norton ghost explorer extract files is completed(at that time must be more than 1% CPU usage)when caught Process/CPU usage is 0% (three minutes to wait, still 0%) and then automatically execute another program (such as restart the computer...)Because the ghost explorer will not retreat (After extraction,Still waiting for closure)if............then ;if CPU Usage (In 3 minutes still 0%) then... Run('TASKKILL /F /PID ' & ProcessExists('ghost explorer11.exe')) shutdown(9) endifis there a way to monitor CPU/Ram usage of the process?see #5 post Edited July 10, 2011 by oo0oo
JohnOne Posted July 10, 2011 Posted July 10, 2011 Look at RunWait() as opposed to Run(). AutoIt Absolute Beginners Require a serial Pause Script Video Tutorials by Morthawt ipify Monkey's are, like, natures humans.
dexto Posted July 10, 2011 Posted July 10, 2011 Another possibility: $pid = Run('notepad.exe') while ProcessExists($pid) sleep(100) WEnd
somdcomputerguy Posted July 10, 2011 Posted July 10, 2011 If you mean how to check if a program is done doing an operation, but the program itself is still running, maybe the ControlGetText() function can be used.. - Bruce /*somdcomputerguy */ If you change the way you look at things, the things you look at change.
oo0oo Posted July 10, 2011 Author Posted July 10, 2011 Hi! Thank! somdcomputerguy is there a way to monitor CPU/Ram usage of the process? I mean when norton ghost explorer extract files is completed(at that time must be more than 1% CPU usage) when caught Process/CPU usage is 0% (three minutes to wait, still 0%) and then automatically execute another program (such as restart the computer...) I finded some idea from forum: expandcollapse popup#include <WindowsConstants.au3> Opt('MustDeclareVars', 1) Opt("TrayIconHide", 1) HotKeySet("{ESC}", "_Exit") Global $iMemo, $hDebugGUI,$Count=0 Global Const $Process_All_Access = 0x1F0FFF Global $CreateTime = DllStructCreate("dword;dword") Global $ExitTime = DllStructCreate("dword;dword") Global $KernelTime = DllStructCreate("dword;dword") Global $UserTime = DllStructCreate("dword;dword") Global $FileTime = DllStructCreate("dword;dword") Global $SystemTime = DllStructCreate("ushort;ushort;ushort;ushort;ushort;ushort;ushort;ushort") Global $IdleTime = DllStructCreate("dword;dword") Global $sUserTime, $sKernelTime, $eUserTime, $eKernelTime Global $ret, $hour, $minutes, $seconds, $milliseconds Global $ProcHandle, $Process_CPU_Usage Global $PID, $CPUTime, $mem, $prg Global $logical_cpus = CPU() Global $hProc Global $GUI, $info,$Msg,$GUI_EVENT_CLOSE Global $iMemo, $hDebugGUI,$Count=0 Global $MenuItem1,$MenuItem2,$MenuItem3,$MenuItem4,$TCB1,$TCB2,$PInput1,$PInput2,$PButton1,$PButton2,$Ppwd1,$Ppwd2,$DrvCB1,$DrvCB2,$Go,$GhoRadio1,$GhoRadio2,$GhoInput,$GhostBtn,$GhoFavoriteCB,$FavoComBo,$OtherFavoBtn ;$prg = "cmd.exe" $prg = "Z:\GHOST\GHOSTEXP11.EXE Z:\GHOST\BACKUP.GHO" Run($prg) Sleep(1000) Send("goXP");here is password Sleep(500) Send("{ENTER}") Sleep(2500) DriveSetLabel("D:\", "New_Label") Send("{ENTER 2}") sleep(500) Send("{DOWN 2}") sleep(3000) Send("{CTRLDOWN}a{CTRLUP}") sleep(200) Send("{CTRLDOWN}e{CTRLUP}") Send("New_Label") sleep(2000) Send("{ALTDOWN}c{ALTUP}") sleep(3000) Send("{ALTDOWN}c{ALTUP}") Send("{ENTER}") ;............................................................................. ;Here is the wait for the extraction is complete ;............................................................................. DriveSetLabel("D:\", "") Local $var = "Test" ConsoleWrite("var=" & $var & @CRLF) ; Running this in a text editor which can trap console output should produce "var=Test" ;$PID = ProcessExists($prg) $PID = ProcessExists("GHOSTE~1.EXE") If $PID = 0 Then ConsoleWrite(@CRLF & "ERROR! Process " & $prg & " not found! Aborting..." & @CRLF) Exit EndIf #Region ### START Koda GUI section ### Form=d:\autoGhoExp.kxf $GUI = GUICreate("AutoGhost Explorer", 447, 177, 371, 560) $MenuItem1 = GUICtrlCreateMenu("&Session") $MenuItem2 = GUICtrlCreateMenuItem("S&ave", $MenuItem1) $MenuItem3 = GUICtrlCreateMenuItem("&Load", $MenuItem1) $MenuItem4 = GUICtrlCreateMenuItem("E&xit", $MenuItem1) $TCB1 = GUICtrlCreateCheckbox("&1.", 5, 3, 30, 17) $TCB2 = GUICtrlCreateCheckbox("&2.", 5, 32, 30, 17) $PInput1 = GUICtrlCreateInput("", 32, 1, 249, 21) $PInput2 = GUICtrlCreateInput("", 32, 30, 249, 21) $PButton1 = GUICtrlCreateButton("Browse", 285, 1, 46, 24, $WS_GROUP) $PButton2 = GUICtrlCreateButton("Browse", 285, 28, 46, 24, $WS_GROUP) $Ppwd1 = GUICtrlCreateInput("", 332, 1, 73, 21) GUICtrlSetLimit(-1, 10) GUICtrlSetTip(-1, "Your Password Here!") $Ppwd2 = GUICtrlCreateInput("", 332, 29, 73, 21) GUICtrlSetLimit(-1, 10) GUICtrlSetTip(-1, "Your Password Here!") $DrvCB1 = GUICtrlCreateCombo("C", 406, 0, 34, 25) GUICtrlSetData(-1, "C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z") $DrvCB2 = GUICtrlCreateCombo("D", 406, 29, 34, 25) GUICtrlSetData(-1, "C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z") $Go = GUICtrlCreateButton("Go&GhoGo", 5, 56, 436, 33, $WS_GROUP) $GhoInput = GUICtrlCreateInput("", 21, 111, 241, 21) $GhoRadio2 = GUICtrlCreateRadio("", 5, 111, 17, 15) $GhostBtn = GUICtrlCreateButton("B&rowse", 263, 111, 46, 24, $WS_GROUP) $GhoFavoriteCB = GUICtrlCreateCheckbox("Favorites:", 321, 93, 72, 16) GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif") GUICtrlSetTip(-1, "Favorites Setting for GV*OS (ini file)") $FavoComBo = GUICtrlCreateCombo("", 311, 111, 129, 25) $OtherFavoBtn = GUICtrlCreateButton("ü", 399, 91, 41, 16, $WS_GROUP) GUICtrlSetTip(-1, "Use other favorite ini file...") $iMemo = GUICtrlCreateEdit("", 1, 137, 468,20) GUICtrlSetFont($iMemo, 9, 400, 0, "Courier New") GUICtrlSetBkColor($iMemo, 0xFFFFFF) GUISetState(@SW_SHOW) #EndRegion ### END Koda GUI section ### $ProcHandle = DllCall("kernel32.dll", "hwnd", "OpenProcess", "dword", $Process_All_Access, "int", False, "dword", $PID) $ProcHandle = $ProcHandle[0] While 1 $CPUTime = _GetProcTime($ProcHandle) $mem = _ProcessGetMem($ProcHandle) / 1024 $hour = Int($CPUTime / 10000000 / 3600) $minutes = Int($CPUTime / 10000000 / 60) If $minutes < 10 Then $minutes = "0" & $minutes $seconds = Round((Int($CPUTime / 10000000) / 60 - Int($CPUTime / 10000000 / 60)) * 60, 0) If $seconds < 10 Then $seconds = "0" & $seconds $milliseconds = Round((Int($CPUTime / 10000) / 1000 - Int(Int($CPUTime / 10000) / 1000)) * 1000, 0) If $milliseconds < 10 Then $milliseconds = "00" & $milliseconds If $milliseconds > 9 And $milliseconds < 100 Then $milliseconds = "0" & $milliseconds $info = @CR & "PID:" & $PID & " | CPU usage:" & $Process_CPU_Usage & "% | Mem usage:" & $mem & "KB | Time:" & $hour & ":" & $minutes & ":" & $seconds & "." & $milliseconds & @CR MemoWrite($info) Sleep(1000) ProcessCPUUsage () If Not ProcessExists($PID) Then _Exit() WEnd Func ProcessCPUUsage () Sleep(1000) If $Process_CPU_Usage=0 Then Sleep(1000) If $Process_CPU_Usage=0 Then $Count=$Count+1 If $Count=60 Then Msgbox(0,"Timeout","Timeout",5) EndIf EndFunc Func MemoWrite($sMessage = "") GUICtrlSetData($iMemo, $sMessage) EndFunc ;==>MemoWrite Func _GetProcTime($ProcessHandle) $ret = DllCall("kernel32.dll", "int", "GetProcessTimes", "int", $ProcessHandle, "ptr", DllStructGetPtr($CreateTime), "ptr", DllStructGetPtr($ExitTime), "ptr", DllStructGetPtr($KernelTime), "ptr", DllStructGetPtr($UserTime)) If $ret[0] = 0 Then ConsoleWrite("(" & @ScriptLineNumber & ") : = Error in GetProcessTimes call" & @CRLF) SetError(1, 0, $ret[0]) EndIf $sKernelTime = DllStructGetData($KernelTime, 1) $sUserTime = DllStructGetData($UserTime, 1) $Process_CPU_Usage = Floor(($sKernelTime - $eKernelTime + $sUserTime - $eUserTime) / 100000 / $logical_cpus) If $Process_CPU_Usage > 100 Then $Process_CPU_Usage = "100" $eKernelTime = $sKernelTime $eUserTime = $sUserTime Return $sUserTime + $sKernelTime EndFunc ;==>_GetProcTime Func _ProcessGetMem($ProcessHandle) ;get physical memory of the process -> http://msdn.microsoft.com/en-us/library/ms683219%28VS.85%29.aspx Local $structPROCESS_MEMORY_COUNTERS, $structPROCESS_MEMORY_COUNTERS_EX, $nSize, $aRet If @OSVersion <> "WIN_7" Then $structPROCESS_MEMORY_COUNTERS = DllStructCreate("dword cb; dword PageFaultCount; dword_ptr PeakWorkingSetSize; dword_ptr WorkingSetSize; " & _ "dword_ptr QuotaPeakPagedPoolUsage; dword_ptr QuotaPagedPoolUsage; dword_ptr QuotaPeakNonPagedPoolUsage; " & _ "dword_ptr QuotaNonPagePoolUsage; dword_ptr PagefileUsage; dword_ptr PeakPagefileUsage") ;http://msdn.microsoft.com/en-us/library/ms684877%28VS.85%29.aspx $nSize = DllStructGetSize($structPROCESS_MEMORY_COUNTERS) $aRet = DllCall("psapi.dll", "int", "GetProcessMemoryInfo", "hwnd", $ProcessHandle, "ptr", DllStructGetPtr($structPROCESS_MEMORY_COUNTERS), "dword", $nSize) ;call GetProcessMemoryInfo If $aRet[0] = 0 Then ConsoleWrite("(" & @ScriptLineNumber & ") : = Error in GetProcessMemoryInfo call" & @LF) SetError(1, 0, $aRet[0]) EndIf Return DllStructGetData($structPROCESS_MEMORY_COUNTERS, "WorkingSetSize") Else $structPROCESS_MEMORY_COUNTERS_EX = DllStructCreate("dword cb; dword PageFaultCount; dword_ptr PeakWorkingSetSize; dword_ptr WorkingSetSize; " & _ "dword_ptr QuotaPeakPagedPoolUsage; dword_ptr QuotaPagedPoolUsage; dword_ptr QuotaPeakNonPagedPoolUsage; " & _ "dword_ptr QuotaNonPagePoolUsage; dword_ptr PagefileUsage; dword_ptr PeakPagefileUsage; " & _ "dword_ptr PrivateUsage") ;http://msdn.microsoft.com/en-us/library/ms684877%28VS.85%29.aspx $nSize = DllStructGetSize($structPROCESS_MEMORY_COUNTERS_EX) $aRet = DllCall("Kernel32.dll", "int", "K32GetProcessMemoryInfo", "hwnd", $ProcessHandle, "ptr", DllStructGetPtr($structPROCESS_MEMORY_COUNTERS_EX), "dword", $nSize) ;call GetProcessMemoryInfo If $aRet[0] = 0 Then ConsoleWrite("(" & @ScriptLineNumber & ") : = Error in GetProcessMemoryInfo call" & @LF) SetError(1, 0, $aRet[0]) EndIf ;~ ConsoleWrite("WorkingSetSize: " & Round(DllStructGetData($structPROCESS_MEMORY_COUNTERS_EX, "WorkingSetSize") / 1024, 0) & @CRLF & _ ;~ "PrivateUsage: " & Round(DllStructGetData($structPROCESS_MEMORY_COUNTERS_EX, "PrivateUsage") / 1024, 0) & @CRLF & @CRLF) Return DllStructGetData($structPROCESS_MEMORY_COUNTERS_EX, "PrivateUsage") EndIf EndFunc ;==>_ProcessGetMem Func CPU() ;get logical CPU(s) Local $i, $j, $x, $os, $colItems, $HW_Processor_Description, $HW_Processor_Manufacturer, $HW_Processor_MaxClockSpeed, $HW_Processor_Name, $HW_Processor_SocketDesignation Local $system = "Localhost" Local $objWMIService = ObjGet("winmgmts:{impersonationLevel=impersonate}!\\" & $system & "\root\cimv2") $colItems = $objWMIService.ExecQuery("SELECT Caption from Win32_OperatingSystem", "WQL", 0x30) ;get OS version If IsObj($colItems) Then For $objItem In $colItems $os = $objItem.Caption Next EndIf If StringInStr($os, "2003") > 0 Or StringInStr($os, "2000") > 0 Or StringInStr(StringUpper($os), "XP") > 0 Then $colItems = $objWMIService.ExecQuery("Select Name, Description, Manufacturer, MaxClockSpeed, SocketDesignation from Win32_Processor", "WQL", 0x30) Else $colItems = $objWMIService.ExecQuery("Select Name, Description, Manufacturer, MaxClockSpeed, SocketDesignation, NumberOfCores, NumberOfLogicalProcessors from Win32_Processor", "WQL", 0x30) EndIf If IsObj($colItems) Then $i = 0 $j = 0 $HW_Processor_SocketDesignation = "" For $objItem In $colItems ;get amount of logical CPUs If StringInStr(StringLower($HW_Processor_SocketDesignation), StringLower($objItem.SocketDesignation)) = 0 Then $HW_Processor_SocketDesignation &= $objItem.SocketDesignation & ", " EndIf $i = $i + 1 Next If StringInStr($os, "2003") > 0 Or StringInStr($os, "2000") > 0 Or StringInStr(StringUpper($os), "XP") > 0 Then $x = StringSplit(Remove_Last_Comma($HW_Processor_SocketDesignation), ",") $j = UBound($x) - 1 Else $i = $objItem.NumberOfCores $j = $objItem.NumberOfLogicalProcessors / $i EndIf If $j > $i Then $j = $i EndIf Return ($i) EndFunc ;==>CPU Func Remove_Last_Comma($str) If StringRight($str, 2) = ", " Then $str = StringMid($str, 1, StringLen($str) - 2) Return $str EndFunc ;==>Remove_Last_Comma Func _Exit() DllCall("kernel32.dll", "int", "CloseHandle", "int", $ProcHandle) DllCall("psapi.dll", "int", "CloseHandle", "hwnd", $ProcHandle) ProcessClose($pid) Exit EndFunc ;==>_Exit Thank All!!!
smartee Posted July 10, 2011 Posted July 10, 2011 Is there any type of progress window that pops up during extraction? I don't have any ghost image files to test with
oo0oo Posted July 10, 2011 Author Posted July 10, 2011 Process to determine whether the error: If the file does not exist,prompt or appear input box. know to finish loading image file(also used CPU usage),(send CTRL+A), labeling target Drive is "New_GHO" then open target dialog box(send CTRL+E)& (send "New_GHO") (Send ENTER) If CPU usage in three minutes still zero, and finally to determine the program has been extracted all files from ghost explorer. Close Ghost Explorer... Erase "New_GHO" to no name(label) Exit and Restart Computer...or continue to another job (add SRS Driver/registry:add runone silent latest software..) Hope to do unattended...
smartee Posted July 10, 2011 Posted July 10, 2011 Wait a sec. Are you trying to simply extract files using Ghost Explorer or is your intention to restore a backup from an image to a hard-disk/partition? Automating the latter is officially supported using command line switches.
wolf9228 Posted July 10, 2011 Posted July 10, 2011 I use norton ghost explorer to extract files from Image, autoit how to determine the procedures have been completed, and then do another task or(restart/shutdown). I mean when norton ghost explorer extract files is completed(at that time must be more than 1% CPU usage) when caught Process/CPU usage is 0% (three minutes to wait, still 0%) and then automatically execute another program (such as restart the computer...) Because the ghost explorer will not retreat (After extraction,Still waiting for closure) if............then ;if CPU Usage (In 3 minutes still 0%) then... Run('TASKKILL /F /PID ' & ProcessExists('ghost explorer11.exe')) shutdown(9) endif is there a way to monitor CPU/Ram usage of the process? see #5 post http://msdn.microsoft.com/en-us/library/aa394277%28VS.85%29.aspx PercentProcessorTime Data type: uint64 Access type: Read-only Qualifiers: CookingType ("PERF_100NSEC_TIMER") , Counter ("PercentProcessorTime") , PerfTimeStamp ("TimeStamp_Sys100NS") , PerfTimeFreq ("Frequency_Sys100NS") Percentage of elapsed time that all of the threads of this process used the processor to execute instructions. An instruction is the basic unit of execution in a computer, a thread is the object that executes instructions, and a process is the object created when a program is run. Code executed to handle some hardware interrupts and trap conditions is included in this count. For more information about using uint64 values in scripts, see Scripting in WMI. #include <Array.au3> $CpuInfoArray = GetCPU() _ArrayDisplay($CpuInfoArray, "CpuInfoArra") Func GetCPU() Dim $CpuInfoArray[1][3] , $i = 0 $winmgmts = ObjGet("winmgmts:\\.\root\cimv2") $Query = "SELECT Name , IDProcess , PercentProcessorTime FROM Win32_PerfFormattedData_PerfProc_Process" $CPU = $winmgmts.ExecQuery($Query) For $CPUINFO in $CPU $i += 1 ReDim $CpuInfoArray[$i][3] $CpuInfoArray[$i - 1][0] = $CPUINFO.Name $CpuInfoArray[$i - 1][1] = $CPUINFO.IDProcess $CpuInfoArray[$i - 1][2] = $CPUINFO.PercentProcessorTime & " %" Next Return $CpuInfoArray EndFunc صرح السماء كان هنا
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