am632 Posted August 15, 2011 Share Posted August 15, 2011 Hi, a while back I asked for some help finishing a check disk utility I was working on and thanks to the people who helped me and a bit of trial and error I have managed to get the check disk utility working exactly as I wanted but there is just 1 problem which remains, I have tried for the past couple of days to fix this by myself but I just have no idea what to do, basically the program wont close either by clicking the cross or pressing esc whilst the loop is in progress - I need the loop because this updates the edit box and the only way I have managed to get the exit to work is to remove the loop, so i'm in a catch 22 situation. Here is the script I currently have... expandcollapse popup#include <ButtonConstants.au3> #include <ComboConstants.au3> #include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> #include <Array.au3> #include <Process.au3> #include <ScrollBarConstants.au3> #include <GuiEdit.au3> Opt("GUIOnEventMode", 1) Opt("GUICloseOnESC", 1) ;Variables Dim $drivearray[100] ;Main GUI $Main = GUICreate("Check-Disk Utility", 510, 520, -1, -1) GUISetBkColor(0xFFFFFF) $Pic1 = GUICtrlCreatePic("Images\HDD.bmp", 12, 32, 128, 100, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS)) GUISetState(@SW_SHOW) GUISetOnEvent($GUI_EVENT_CLOSE, "_CloseApplication") ;Group 1 [Description Labels] $Group1 = GUICtrlCreateGroup("", 152, 8, 345, 89) $DESCRIPTION1 = GUICtrlCreateLabel("This is a simple tool which checks a volume for", 163, 19, 328, 24) GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif") $DESCRIPTION2 = GUICtrlCreateLabel("Problems and attemps to fix them if any are ", 163, 44, 312, 24) GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif") $DESCRIPTION3 = GUICtrlCreateLabel("Found.", 163, 71, 54, 24) GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif") GUICtrlCreateGroup("", -99, -99, 1, 1) ;Group 2 [Radio Buttons] $Group2 = GUICtrlCreateGroup("", 152, 104, 345, 97) $Radio1 = GUICtrlCreateRadio("Read-Only", 176, 121, 137, 17) GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif") $Radio2 = GUICtrlCreateRadio("Repair Errors", 176, 145, 145, 17) GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif") $Radio3 = GUICtrlCreateRadio("Locate Bad-Sectors & Repair", 176, 169, 241, 17) GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif") GUICtrlSetState ($Radio2,$GUI_CHECKED) GUICtrlCreateGroup("", -99, -99, 1, 1) ;Start Button $BUTTON_START = GUICtrlCreateButton("Start", 39, 234, 75, 25, $WS_GROUP) GUICtrlSetOnEvent($BUTTON_START, "_Start_Function") GUISetState () ;EditBox $EDIT_BOX = GUICtrlCreateEdit("", 16, 272, 481, 235,$WS_VSCROLL) ;$ES_AUTOVSCROLL ;$EDIT_BOX = GUICtrlCreateEdit("", 16, 272, 481, 193,BitOr($WS_VSCROLL, $ES_AUTOVSCROLL)) GUICtrlSetData($EDIT_BOX, "Click the Start Button to Begin...") GUICtrlSetFont($EDIT_BOX, 10, 400, 0, "MS Sans Serif") ;--------------- Build-up list of disks that can be checked --------------- NOT MY CODE, TAKEN FROM ANOTHER CHECK DISK UTILITY. $drives = DriveGetDrive("ALL") $drivelist = "" $y = 1 For $i = 1 to $drives[0] $DriveType = DriveGetType($drives[$i]) If $DriveType = "Removable" or $DriveType = "Fixed" or $DriveType = "RAMDisk" then $drivearray[$y] = $drives[$i] $y = $y + 1 EndIf Next $drivearray[0] = $y - 1 _ArraySort($drivearray, 0, 0, $y - 1) If NOT @error Then For $i = 1 to $drivearray[0] $drivearray[$i] = StringUpper($drivearray[$i]) $DriveStatus = DriveStatus($drivearray[$i]) if $DriveStatus = "NOTREADY" then $DriveInfo = "drive is empty" elseif $DriveStatus = "UNKNOWN" then $DriveInfo = "may be unformatted" else $DriveInfo = DriveGetLabel($drivearray[$i]) if $DriveInfo = "" then $DriveInfo = "has no label" endif $drivearray[$i] = String($drivearray[$i] & " [" & $DriveInfo & "]") If $i > 1 Then $drivelist = $drivelist & "|" Endif $drivelist = $drivelist & $drivearray[$i] Next EndIf If $drivelist = "" Then ; no suitable drives found, show all drive letters $drivelist = "A:|B:|C:|D:|E:|F:|G:|H:|I:|J:|K:|L:|M:|N:|O:|P:|Q:|R:|S:|T:|U:|V:|W:|X:|Y:|Z:" $defaultdrive = "C:" Else $defaultdrive = $drivearray[1] Endif ;Combo Box $Label1 = GUICtrlCreateLabel("Select Drive to Scan", 164, 209, 148, 24) GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif") $COMBO = GUICtrlCreateCombo("", 168, 236, 313, 25) GUICtrlSetData(-1, $drivelist, $defaultdrive) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; While 1 Sleep(250) WEnd ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;Functions Func _CloseApplication() If @GUI_CTRLID = $GUI_EVENT_CLOSE Then _Exit_Command() EndFunc Func _Exit_Command() If ProcessExists("cmd.exe") Then ProcessClose("cmd.exe") EndIf If ProcessExists("chkdsk.exe") Then ProcessClose("chkdsk.exe") EndIf FileDelete("checkdisklog.txt") FileDelete("chkdsk_command.bat") Exit EndFunc Func _Start_Function() $fulllocation = GUICtrlRead($COMBO) $location = StringLeft($fulllocation, 2) $TARGET = $location ;envset ("Target", $location) IF GUICtrlRead($Radio1) = "1" then ;$PID = Run(@ComSpec & " /c" & '@color 17 && @echo. && %systemroot%\system32\chkdsk.exe %Target% >checkdisklog.txt & echo. && pause',"", @SW_HIDE) FileWrite("chkdsk_command.bat", "chkdsk " & $TARGET & " " & ">checkdisklog.txt") $PID = Run("chkdsk_command.bat","", @SW_HIDE) Do $line = FileRead("checkdisklog.txt") GUICtrlSetData($EDIT_BOX, $line) _GUICtrlEdit_Scroll($EDIT_BOX, $SB_SCROLLCARET) Sleep(2000) Until ProcessExists("chkdsk.exe") = @error Sleep(4000) ProcessClose($PID) GUICtrlSetData($EDIT_BOX, $line) _GUICtrlEdit_Scroll($EDIT_BOX, $SB_SCROLLCARET) FileDelete("chkdsk_command.bat") MsgBox(0,"","Scan Complete") ElseIF GUICtrlRead($Radio2) = "1" then FileWrite("chkdsk_command.bat", "echo y|chkdsk " & $TARGET & " /f " & ">checkdisklog.txt") $PID = Run("chkdsk_command.bat","", @SW_HIDE) Do $line = FileRead("checkdisklog.txt") GUICtrlSetData($EDIT_BOX, $line) _GUICtrlEdit_Scroll($EDIT_BOX, $SB_SCROLLCARET) Sleep(2000) Until ProcessExists("chkdsk.exe") = @error Sleep(4000) ProcessClose($PID) GUICtrlSetData($EDIT_BOX, $line) _GUICtrlEdit_Scroll($EDIT_BOX, $SB_SCROLLCARET) FileDelete("chkdsk_command.bat") If @HomeDrive = $TARGET Then $ans = MsgBox(4,"","Scan will start on next boot, would you like to restart your computer now?") Select Case $ans = 6 Shutdown(6) Case $ans = 7 Sleep(0) EndSelect Else MsgBox(0,"","Scan Complete") EndIf ElseIF GUICtrlRead($Radio3) = "1" then FileWrite("chkdsk_command.bat", "echo y|chkdsk " & $TARGET & " /r " & ">checkdisklog.txt") $PID = Run("chkdsk_command.bat","", @SW_HIDE) Do $line = FileRead("checkdisklog.txt") GUICtrlSetData($EDIT_BOX, $line) _GUICtrlEdit_Scroll($EDIT_BOX, $SB_SCROLLCARET) Sleep(2000) Until ProcessExists("chkdsk.exe") = @error Sleep(4000) ProcessClose($PID) GUICtrlSetData($EDIT_BOX, $line) _GUICtrlEdit_Scroll($EDIT_BOX, $SB_SCROLLCARET) FileDelete("chkdsk_command.bat") If @HomeDrive = $TARGET Then $ans = MsgBox(4,"","Scan will start on next boot, would you like to restart your computer now?") Select Case $ans = 6 Shutdown(6) Case $ans = 7 Sleep(0) EndSelect Else MsgBox(0,"","Scan Complete") EndIf EndIF EndFunc Please can anyone help me fix my problem? Thanks Note: I mentioned this in my other post but I just want to say that not all the code is mine, the select drive box was taken from another chkdsk script and credit is due to them + credit to the people who have helped me with the other code. Link to comment Share on other sites More sharing options...
AdmiralAlkex Posted August 15, 2011 Share Posted August 15, 2011 Please see Interrupting a running function in the wiki, it will help you with this .Some of my scripts: ShiftER, Codec-Control, Resolution switcher for HTC ShiftSome of my UDFs: SDL UDF, SetDefaultDllDirectories, Converting GDI+ Bitmap/Image to SDL Surface Link to comment Share on other sites More sharing options...
am632 Posted August 15, 2011 Author Share Posted August 15, 2011 Hi, thanks for the link, to be honest I really dont understand how to intergrate this into my script, if anyone has any spare time would you possibly mind modifying my script to make this work and possibly comment the modifications so I can understand how it works. I realise people are busy and it's not good to just ask someone to do it for you but i'm really stuck on this 1. Thanks Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted August 15, 2011 Moderators Share Posted August 15, 2011 (edited) am632, As the author of the tutorial I am a little disappointed that you were not able to follow it. Here is your script with a few added lines to show you how to integrate some of the code from the tutorial into your script. Look at what I have done and read the comments - then see if you understand why the code works and how to integrate it into your full script. I have left you to do some of the work - best way to learn. expandcollapse popup#include <ButtonConstants.au3> #include <ComboConstants.au3> #include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> #include <Array.au3> #include <Process.au3> #include <ScrollBarConstants.au3> #include <GuiEdit.au3> Opt("GUIOnEventMode", 1) Opt("GUICloseOnESC", 1) ;Variables Global $drivearray[100], $fInterrupt = 0 ; Create flag to indicate if we should interrupt a running function <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ;Main GUI $Main = GUICreate("Check-Disk Utility", 510, 520, -1, -1) GUISetBkColor(0xFFFFFF) $Pic1 = GUICtrlCreatePic("Images\HDD.bmp", 12, 32, 128, 100, BitOR($SS_NOTIFY, $WS_GROUP, $WS_CLIPSIBLINGS)) GUISetState(@SW_SHOW) GUISetOnEvent($GUI_EVENT_CLOSE, "_CloseApplication") ;Group 1 [Description Labels] $Group1 = GUICtrlCreateGroup("", 152, 8, 345, 89) $DESCRIPTION1 = GUICtrlCreateLabel("This is a simple tool which checks a volume for", 163, 19, 328, 24) GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif") $DESCRIPTION2 = GUICtrlCreateLabel("Problems and attemps to fix them if any are ", 163, 44, 312, 24) GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif") $DESCRIPTION3 = GUICtrlCreateLabel("Found.", 163, 71, 54, 24) GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif") GUICtrlCreateGroup("", -99, -99, 1, 1) ;Group 2 [Radio Buttons] $Group2 = GUICtrlCreateGroup("", 152, 104, 345, 97) $Radio1 = GUICtrlCreateRadio("Read-Only", 176, 121, 137, 17) GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif") $Radio2 = GUICtrlCreateRadio("Repair Errors", 176, 145, 145, 17) GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif") $Radio3 = GUICtrlCreateRadio("Locate Bad-Sectors & Repair", 176, 169, 241, 17) GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif") GUICtrlSetState($Radio2, $GUI_CHECKED) GUICtrlCreateGroup("", -99, -99, 1, 1) ;Stop Button $BUTTON_STOP = GUICtrlCreateButton("Stop", 39, 204, 75, 25, $WS_GROUP) ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ;Start Button $BUTTON_START = GUICtrlCreateButton("Start", 39, 234, 75, 25, $WS_GROUP) GUICtrlSetOnEvent($BUTTON_START, "_Start_Function") GUISetState() ;EditBox $EDIT_BOX = GUICtrlCreateEdit("", 16, 272, 481, 235, $WS_VSCROLL) ;$ES_AUTOVSCROLL ;$EDIT_BOX = GUICtrlCreateEdit("", 16, 272, 481, 193,BitOr($WS_VSCROLL, $ES_AUTOVSCROLL)) GUICtrlSetData($EDIT_BOX, "Click the Start Button to Begin...") GUICtrlSetFont($EDIT_BOX, 10, 400, 0, "MS Sans Serif") ;--------------- Build-up list of disks that can be checked --------------- NOT MY CODE, TAKEN FROM ANOTHER CHECK DISK UTILITY. $drives = DriveGetDrive("ALL") $drivelist = "" $y = 1 For $i = 1 To $drives[0] $DriveType = DriveGetType($drives[$i]) If $DriveType = "Removable" Or $DriveType = "Fixed" Or $DriveType = "RAMDisk" Then $drivearray[$y] = $drives[$i] $y = $y + 1 EndIf Next $drivearray[0] = $y - 1 _ArraySort($drivearray, 0, 0, $y - 1) If Not @error Then For $i = 1 To $drivearray[0] $drivearray[$i] = StringUpper($drivearray[$i]) $DriveStatus = DriveStatus($drivearray[$i]) If $DriveStatus = "NOTREADY" Then $DriveInfo = "drive is empty" ElseIf $DriveStatus = "UNKNOWN" Then $DriveInfo = "may be unformatted" Else $DriveInfo = DriveGetLabel($drivearray[$i]) If $DriveInfo = "" Then $DriveInfo = "has no label" EndIf $drivearray[$i] = String($drivearray[$i] & " [" & $DriveInfo & "]") If $i > 1 Then $drivelist = $drivelist & "|" EndIf $drivelist = $drivelist & $drivearray[$i] Next EndIf If $drivelist = "" Then ; no suitable drives found, show all drive letters $drivelist = "A:|B:|C:|D:|E:|F:|G:|H:|I:|J:|K:|L:|M:|N:|O:|P:|Q:|R:|S:|T:|U:|V:|W:|X:|Y:|Z:" $defaultdrive = "C:" Else $defaultdrive = $drivearray[1] EndIf ;Combo Box $Label1 = GUICtrlCreateLabel("Select Drive to Scan", 164, 209, 148, 24) GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif") $COMBO = GUICtrlCreateCombo("", 168, 236, 313, 25) GUICtrlSetData(-1, $drivelist, $defaultdrive) ; Register the WM_COMMAND message whic is sent by a button press GUIRegisterMsg($WM_COMMAND, "_WM_COMMAND") ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; While 1 Sleep(250) WEnd ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;Functions Func _CloseApplication() If @GUI_CtrlId = $GUI_EVENT_CLOSE Then _Exit_Command() EndFunc ;==>_CloseApplication Func _Exit_Command() If ProcessExists("cmd.exe") Then ProcessClose("cmd.exe") EndIf If ProcessExists("chkdsk.exe") Then ProcessClose("chkdsk.exe") EndIf FileDelete("checkdisklog.txt") FileDelete("chkdsk_command.bat") Exit EndFunc ;==>_Exit_Command Func _Start_Function() $fulllocation = GUICtrlRead($COMBO) $location = StringLeft($fulllocation, 2) $TARGET = $location ;envset ("Target", $location) If GUICtrlRead($Radio1) = "1" Then ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< $iBegin = TimerInit() ; This is to simulate the ChkDsk running Do ; This is the Do...Until loop you already heve If $fInterrupt Then ; Look for the interrupt flag ConsoleWrite("Interrupting..." & @CRLF) ; Announce it $fInterrupt = 0 ; Clear the flag ExitLoop ; Exit the loop EndIf ConsoleWrite("In Loop 1 at " & @SEC & @CRLF) ; Announce that ChekDsk is still being simulated Sleep(1000) ; Save the CPU Until TimerDiff($iBegin) > 20000 ; After 20 secs assume ChekDsk is finished ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< #cs ;$PID = Run(@ComSpec & " /c" & '@color 17 && @echo. && %systemroot%\system32\chkdsk.exe %Target% >checkdisklog.txt & echo. && pause',"", @SW_HIDE) FileWrite("chkdsk_command.bat", "chkdsk " & $TARGET & " " & ">checkdisklog.txt") $PID = Run("chkdsk_command.bat", "", @SW_HIDE) Do $line = FileRead("checkdisklog.txt") GUICtrlSetData($EDIT_BOX, $line) _GUICtrlEdit_Scroll($EDIT_BOX, $SB_SCROLLCARET) Sleep(2000) Until ProcessExists("chkdsk.exe") = @error Sleep(4000) ProcessClose($PID) GUICtrlSetData($EDIT_BOX, $line) _GUICtrlEdit_Scroll($EDIT_BOX, $SB_SCROLLCARET) FileDelete("chkdsk_command.bat") MsgBox(0, "", "Scan Complete") #ce ElseIf GUICtrlRead($Radio2) = "1" Then $iBegin = TimerInit() Do If $fInterrupt Then ConsoleWrite("Interrupting..." & @CRLF) $fInterrupt = 0 ExitLoop EndIf ConsoleWrite("In Loop 2 at " & @SEC & @CRLF) Sleep(1000) Until TimerDiff($iBegin) > 20000 #cs FileWrite("chkdsk_command.bat", "echo y|chkdsk " & $TARGET & " /f " & ">checkdisklog.txt") $PID = Run("chkdsk_command.bat", "", @SW_HIDE) Do $line = FileRead("checkdisklog.txt") GUICtrlSetData($EDIT_BOX, $line) _GUICtrlEdit_Scroll($EDIT_BOX, $SB_SCROLLCARET) Sleep(2000) Until ProcessExists("chkdsk.exe") = @error Sleep(4000) ProcessClose($PID) GUICtrlSetData($EDIT_BOX, $line) _GUICtrlEdit_Scroll($EDIT_BOX, $SB_SCROLLCARET) FileDelete("chkdsk_command.bat") If @HomeDrive = $TARGET Then $ans = MsgBox(4, "", "Scan will start on next boot, would you like to restart your computer now?") Select Case $ans = 6 Shutdown(6) Case $ans = 7 Sleep(0) EndSelect Else MsgBox(0, "", "Scan Complete") EndIf #ce ElseIf GUICtrlRead($Radio3) = "1" Then $iBegin = TimerInit() Do If $fInterrupt Then ConsoleWrite("Interrupting..." & @CRLF) $fInterrupt = 0 ExitLoop EndIf ConsoleWrite("In Loop 3 at " & @SEC & @CRLF) Sleep(1000) Until TimerDiff($iBegin) > 20000 #cs FileWrite("chkdsk_command.bat", "echo y|chkdsk " & $TARGET & " /r " & ">checkdisklog.txt") $PID = Run("chkdsk_command.bat", "", @SW_HIDE) Do $line = FileRead("checkdisklog.txt") GUICtrlSetData($EDIT_BOX, $line) _GUICtrlEdit_Scroll($EDIT_BOX, $SB_SCROLLCARET) Sleep(2000) Until ProcessExists("chkdsk.exe") = @error Sleep(4000) ProcessClose($PID) GUICtrlSetData($EDIT_BOX, $line) _GUICtrlEdit_Scroll($EDIT_BOX, $SB_SCROLLCARET) FileDelete("chkdsk_command.bat") If @HomeDrive = $TARGET Then $ans = MsgBox(4, "", "Scan will start on next boot, would you like to restart your computer now?") Select Case $ans = 6 Shutdown(6) Case $ans = 7 Sleep(0) EndSelect Else MsgBox(0, "", "Scan Complete") EndIf #ce EndIf EndFunc ;==>_Start_Function ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ; This is the function we run when we intercept a button press Func _WM_COMMAND($hWnd, $Msg, $wParam, $lParam) ; The STOP button was pressed so set the flag If BitAND($wParam, 0x0000FFFF) = $BUTTON_STOP Then $fInterrupt = 1 Return $GUI_RUNDEFMSG EndFunc ;==>_WM_COMMAND ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< Come back if you have problems or questions. M23 Edit: Added the script! Edited August 15, 2011 by Melba23  Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area  Link to comment Share on other sites More sharing options...
MvGulik Posted August 15, 2011 Share Posted August 15, 2011 (edited) am632 apparently not going to ask what I'm thinking. ... ' what script?' --- Aha. I see it now. Edited August 15, 2011 by iEvKI3gv9Wrkd41u "Straight_and_Crooked_Thinking" : A "classic guide to ferreting out untruths, half-truths, and other distortions of facts in political and social discussions.""The Secrets of Quantum Physics" : New and excellent 2 part documentary on Quantum Physics by Jim Al-Khalili. (Dec 2014) "Believing what you know ain't so" ... Knock Knock ... Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted August 15, 2011 Moderators Share Posted August 15, 2011 iEvKI3gv9Wrkd41u,what script?That script! M23  Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area  Link to comment Share on other sites More sharing options...
am632 Posted August 21, 2011 Author Share Posted August 21, 2011 Hi, thanks for your help, I have finished the script but I used another example which I found here http://www.zerozaku.com/viewtopic.php?f=57&t=133 Here is the working script for anyone who wants to see expandcollapse popup#include <ButtonConstants.au3> #include <ComboConstants.au3> #include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> #include <Array.au3> #include <Process.au3> #include <ScrollBarConstants.au3> #include <GuiEdit.au3> Opt("GUIOnEventMode", 1) Opt("GUICloseOnESC", 1) ;Variables Dim $drivearray[100], $Var = False, $TempDir = @TempDir & "\" If FileExists($TempDir & "checkdisklog.txt") Then FileDelete($TempDir & "checkdisklog.txt") EndIf ;Main GUI $Main = GUICreate("Check-Disk Utility", 510, 520, -1, -1) GUISetBkColor(0xFFFFFF) $Pic1 = GUICtrlCreatePic("Images\HDD.bmp", 12, 32, 128, 100, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS)) GUISetState(@SW_SHOW) GUISetOnEvent($GUI_EVENT_CLOSE, "_CloseApplication") ;Group 1 [Description Labels] $Group1 = GUICtrlCreateGroup("", 152, 8, 345, 89) $DESCRIPTION1 = GUICtrlCreateLabel("This is a simple tool which checks a volume for", 163, 19, 328, 24) GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif") $DESCRIPTION2 = GUICtrlCreateLabel("Problems and attemps to fix them if any are ", 163, 44, 312, 24) GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif") $DESCRIPTION3 = GUICtrlCreateLabel("Found.", 163, 71, 54, 24) GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif") GUICtrlCreateGroup("", -99, -99, 1, 1) ;Group 2 [Radio Buttons] $Group2 = GUICtrlCreateGroup("", 152, 104, 345, 97) $Radio1 = GUICtrlCreateRadio("Read-Only", 176, 121, 137, 17) GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif") $Radio2 = GUICtrlCreateRadio("Repair Errors", 176, 145, 145, 17) GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif") $Radio3 = GUICtrlCreateRadio("Locate Bad-Sectors & Repair", 176, 169, 241, 17) GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif") GUICtrlSetState ($Radio2,$GUI_CHECKED) GUICtrlCreateGroup("", -99, -99, 1, 1) ;Start Button $BUTTON_START = GUICtrlCreateButton("Start", 39, 234, 75, 25, $WS_GROUP) GUICtrlSetOnEvent($BUTTON_START, "_Begin_Start_Function") ;EditBox $EDIT_BOX = GUICtrlCreateEdit("", 16, 272, 481, 235,$WS_VSCROLL) ;$ES_AUTOVSCROLL ;$EDIT_BOX = GUICtrlCreateEdit("", 16, 272, 481, 193,BitOr($WS_VSCROLL, $ES_AUTOVSCROLL)) GUICtrlSetData($EDIT_BOX, "Click the Start Button to Begin...") GUICtrlSetFont($EDIT_BOX, 10, 400, 0, "MS Sans Serif") ;--------------- Build-up list of disks that can be checked --------------- NOT MY CODE, TAKEN FROM ANOTHER CHECK DISK UTILITY. $drives = DriveGetDrive("ALL") $drivelist = "" $y = 1 For $i = 1 to $drives[0] $DriveType = DriveGetType($drives[$i]) If $DriveType = "Removable" or $DriveType = "Fixed" or $DriveType = "RAMDisk" then $drivearray[$y] = $drives[$i] $y = $y + 1 EndIf Next $drivearray[0] = $y - 1 _ArraySort($drivearray, 0, 0, $y - 1) If NOT @error Then For $i = 1 to $drivearray[0] $drivearray[$i] = StringUpper($drivearray[$i]) $DriveStatus = DriveStatus($drivearray[$i]) if $DriveStatus = "NOTREADY" then $DriveInfo = "drive is empty" elseif $DriveStatus = "UNKNOWN" then $DriveInfo = "may be unformatted" else $DriveInfo = DriveGetLabel($drivearray[$i]) if $DriveInfo = "" then $DriveInfo = "has no label" endif $drivearray[$i] = String($drivearray[$i] & " [" & $DriveInfo & "]") If $i > 1 Then $drivelist = $drivelist & "|" Endif $drivelist = $drivelist & $drivearray[$i] Next EndIf If $drivelist = "" Then ; no suitable drives found, show all drive letters $drivelist = "A:|B:|C:|D:|E:|F:|G:|H:|I:|J:|K:|L:|M:|N:|O:|P:|Q:|R:|S:|T:|U:|V:|W:|X:|Y:|Z:" $defaultdrive = "C:" Else $defaultdrive = $drivearray[1] Endif ;Combo Box $Label1 = GUICtrlCreateLabel("Select Drive to Scan", 164, 209, 148, 24) GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif") $COMBO = GUICtrlCreateCombo("", 168, 236, 313, 25) GUICtrlSetData(-1, $drivelist, $defaultdrive) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; While 1 Sleep(0) If $Var Then _Start_Function() EndIf WEnd ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;Functions Func _CloseApplication() If @GUI_CTRLID = $GUI_EVENT_CLOSE Then _Exit_Command() EndFunc Func _Exit_Command() If ProcessExists("cmd.exe") Then ProcessClose("cmd.exe") EndIf If ProcessExists("chkdsk.exe") Then ProcessClose("chkdsk.exe") EndIf Sleep(500) If FileExists($TempDir & "chkdsk_command.bat") Then FileDelete($TempDir & "chkdsk_command.bat") EndIf If FileExists($TempDir & "checkdisklog.txt") Then FileDelete($TempDir & "checkdisklog.txt") EndIf Exit EndFunc Func _Begin_Start_Function() $Var = True EndFunc Func _Start_Function() $Var = False GUICtrlSetState($BUTTON_START,$GUI_DISABLE) $fulllocation = GUICtrlRead($COMBO) $location = StringLeft($fulllocation, 2) $TARGET = $location ;envset ("Target", $location) IF GUICtrlRead($Radio1) = "1" then ;$PID = Run(@ComSpec & " /c" & '@color 17 && @echo. && %systemroot%\system32\chkdsk.exe %Target% >checkdisklog.txt & echo. && pause',"", @SW_HIDE) FileWrite($TempDir & "chkdsk_command.bat", "chkdsk " & $TARGET & " " & ">" & $TempDir & "checkdisklog.txt") $PID = Run($TempDir & "chkdsk_command.bat","", @SW_HIDE) Do Sleep(2000) $line = FileRead($TempDir & "checkdisklog.txt") GUICtrlSetData($EDIT_BOX, $line) _GUICtrlEdit_Scroll($EDIT_BOX, $SB_SCROLLCARET) Until ProcessExists("chkdsk.exe") = @error ;Sleep(1000) ProcessClose($PID) ;GUICtrlSetData($EDIT_BOX, $line) ;_GUICtrlEdit_Scroll($EDIT_BOX, $SB_SCROLLCARET) FileDelete($TempDir & "chkdsk_command.bat") MsgBox(0,"","Scan Complete") GUICtrlSetState($BUTTON_START,$GUI_ENABLE) ElseIF GUICtrlRead($Radio2) = "1" then FileWrite($TempDir & "chkdsk_command.bat", "echo y|chkdsk " & $TARGET & " /f " & ">" & $TempDir & "checkdisklog.txt") $PID = Run($TempDir & "chkdsk_command.bat","", @SW_HIDE) Do Sleep(2000) $line = FileRead($TempDir & "checkdisklog.txt") GUICtrlSetData($EDIT_BOX, $line) _GUICtrlEdit_Scroll($EDIT_BOX, $SB_SCROLLCARET) Until ProcessExists("chkdsk.exe") = @error ;Sleep(1000) ProcessClose($PID) ;GUICtrlSetData($EDIT_BOX, $line) ;_GUICtrlEdit_Scroll($EDIT_BOX, $SB_SCROLLCARET) FileDelete($TempDir & "chkdsk_command.bat") If @HomeDrive = $TARGET Then $ans = MsgBox(4,"","Scan will start on next boot, would you like to restart your computer now?") Select Case $ans = 6 Shutdown(6) Case $ans = 7 Sleep(0) EndSelect Else MsgBox(0,"","Scan Complete") EndIf GUICtrlSetState($BUTTON_START,$GUI_ENABLE) ElseIF GUICtrlRead($Radio3) = "1" then FileWrite($TempDir & "chkdsk_command.bat", "echo y|chkdsk " & $TARGET & " /r " & ">" & $TempDir & "checkdisklog.txt") $PID = Run($TempDir & "chkdsk_command.bat","", @SW_HIDE) Do Sleep(2000) $line = FileRead($TempDir & "checkdisklog.txt") GUICtrlSetData($EDIT_BOX, $line) _GUICtrlEdit_Scroll($EDIT_BOX, $SB_SCROLLCARET) Until ProcessExists("chkdsk.exe") = @error ;Sleep(1000) ProcessClose($PID) ;GUICtrlSetData($EDIT_BOX, $line) ;_GUICtrlEdit_Scroll($EDIT_BOX, $SB_SCROLLCARET) FileDelete($TempDir & "chkdsk_command.bat") If @HomeDrive = $TARGET Then $ans = MsgBox(4,"","Scan will start on next boot, would you like to restart your computer now?") Select Case $ans = 6 Shutdown(6) Case $ans = 7 Sleep(0) EndSelect Else MsgBox(0,"","Scan Complete") EndIf GUICtrlSetState($BUTTON_START,$GUI_ENABLE) EndIF EndFunc 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