Jump to content
Sign in to follow this  
oo0oo

[Need Help!] after completion extract, automatically close application

Recommended Posts

oo0oo

I mean when norton ghost explorer extract files is completed(at that time be more than 2% 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...) see title...

Is there a way to monitor CPU/Ram usage of the process?...

The following code is just the beginning of the concept and reference

In WINPE enviroment, I just put the old data revenue a folder, and then

start with ghost explorer to extract all the files, then restart the computer (not MS Shutdown.exe)

Stated: Image file has a Sysprep. (Such as unattended feature)

The following code is just the beginning of the concept and reference...

#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

Share this post


Link to post
Share on other sites
smartee

Please stick to your Its still on the first page too!! Only create a new topic when you have a new (sufficiently unrelated) issue.

Share this post


Link to post
Share on other sites
oo0oo

maybe my not clear.

May have misunderstood my meaning (idea)...

Sorry...

Share this post


Link to post
Share on other sites
oo0oo

like ghost32.exe -rb -fx

Because the ghost explorer will not retreat (After extraction,Still waiting for closure

Edited by oo0oo

Share this post


Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.