jebus495 Posted October 9, 2009 Share Posted October 9, 2009 expandcollapse popup#include <ButtonConstants.au3> #include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> Global $Input1, $nMsg _GUI() Func _GUI() $Form1_1 = GUICreate("CrapHack Installation", 256, 248, 342, 209) $Input1 = GUICtrlCreateInput("C:\Program Files\Diablo II", 16, 55, 217, 21) $Label1 = GUICtrlCreateLabel("Please enter your Diablo II directory below.", 17, 18, 230, 33) $Checkbox1 = GUICtrlCreateCheckbox("See monsters on map", 16, 88, 129, 17) GUICtrlSetState ($Checkbox1, $GUI_CHECKED) $Checkbox2 = GUICtrlCreateCheckbox("See healthbars and immunities", 16, 120, 185, 17) $Checkbox3 = GUICtrlCreateCheckbox("Load in window mode", 16, 152, 137, 17) $Button1 = GUICtrlCreateButton("Install", 88, 200, 75, 25) GUISetState(@SW_SHOW) While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $Checkbox1 If GUICtrlRead($Checkbox1) = $GUI_CHECKED Then GUICtrlSetState($Checkbox2, $GUI_UNCHECKED) If GUICtrlRead($Checkbox1) = $GUI_UNCHECKED And GUICtrlRead($Checkbox2) = $GUI_UNCHECKED Then GUICtrlSetState($Checkbox1, $GUI_CHECKED) Case $Checkbox2 If GUICtrlRead($Checkbox2) = $GUI_CHECKED Then GUICtrlSetState ($Checkbox1, $GUI_UNCHECKED) If GUICtrlRead($Checkbox2) = $GUI_UNCHECKED And GUICtrlRead($Checkbox1) = $GUI_UNCHECKED Then GUICtrlSetState($Checkbox2, $GUI_CHECKED) Case $Button1 GUISetState(@SW_HIDE) _install() EndSwitch WEnd EndFunc Func _install() $existcase = FileExists($Input1 & "\game.exe") If $existcase = 0 Then $_CorR = MsgBox(21, "Path incorrect", "Enter correct path or cancel.") If $_CorR = 4 Then GUISetState(@SW_SHOW) _GUI() If $_CorR = 2 Then Exit EndIf EndIf EndIf EndFunc This is probably a simple oversight on my part. I'm not exactly familiar with GUI's. It checks the path in the input box for a file and if it isn't there it pops up a msgbox to either close the script or retry. When you press cancel or "X" in the msgbox the script doesn't close. Is there something I'm missing here? Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted October 9, 2009 Moderators Share Posted October 9, 2009 jebus495,You are calling your _GUI function recursively - that is it is being called again by _install before it ends - and this always leads to problems unless you know exactly what you are doing. Try replacing your _install function with this one:Func _install() $existcase = FileExists($Input1 & "\game.exe") If $existcase = 0 Then ; File does not exist so see what to do next Switch MsgBox(21, "Path incorrect", "Enter correct path or cancel.") ; This is "Retry" Case 4 GUISetState(@SW_SHOW) ;_GUI() ; Do NOT call function recursively - the GUI is already there! Return Case 2 Exit EndSwitch Else ; File exists so do the installing stuff EndIf EndFunc ;==>_installI have altered the MsgBox code a bit to make it tighter - I hope you can see what I have done and why. Please ask if not.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...
water Posted October 9, 2009 Share Posted October 9, 2009 I modified your script a little bit: expandcollapse popup#include <ButtonConstants.au3> #include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> Global $Input1, $nMsg, $sInstallPath, $Form1_1 _GUI() Func _GUI() $Form1_1 = GUICreate("CrapHack Installation", 256, 248, 342, 209) $Input1 = GUICtrlCreateInput("C:\Program Files\Diablo II", 16, 55, 217, 21) $Label1 = GUICtrlCreateLabel("Please enter your Diablo II directory below.", 17, 18, 230, 33) $Checkbox1 = GUICtrlCreateCheckbox("See monsters on map", 16, 88, 129, 17) GUICtrlSetState ($Checkbox1, $GUI_CHECKED) $Checkbox2 = GUICtrlCreateCheckbox("See healthbars and immunities", 16, 120, 185, 17) $Checkbox3 = GUICtrlCreateCheckbox("Load in window mode", 16, 152, 137, 17) $Button1 = GUICtrlCreateButton("Install", 88, 200, 75, 25) GUISetState(@SW_SHOW) While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $Checkbox1 If GUICtrlRead($Checkbox1) = $GUI_CHECKED Then GUICtrlSetState($Checkbox2, $GUI_UNCHECKED) If GUICtrlRead($Checkbox1) = $GUI_UNCHECKED And GUICtrlRead($Checkbox2) = $GUI_UNCHECKED Then GUICtrlSetState($Checkbox1, $GUI_CHECKED) Case $Checkbox2 If GUICtrlRead($Checkbox2) = $GUI_CHECKED Then GUICtrlSetState ($Checkbox1, $GUI_UNCHECKED) If GUICtrlRead($Checkbox2) = $GUI_UNCHECKED And GUICtrlRead($Checkbox1) = $GUI_UNCHECKED Then GUICtrlSetState($Checkbox2, $GUI_CHECKED) Case $Button1 $sInstallPath = GUICtrlRead($Input1) _install() EndSwitch WEnd EndFunc Func _install() While 1 $existcase = FileExists($sInstallPath & "\game.exe") If $existcase = 0 Then $_CorR = MsgBox(21, "Path incorrect", $sInstallPath & "\game.exe does not exist!" & @CRLF & "Enter correct path or cancel.") If $_CorR = 4 Then Return; ; Retry selected Exit ; All other selections exit the script Else ExitLoop EndIf WEnd ; here the install begins. Delete the GUI as it is no longer needed GUIDelete($Form1_1) EndFunc My UDFs and Tutorials: Spoiler UDFs:Active Directory (NEW 2022-02-19 - Version 1.6.1.0) - Download - General Help & Support - Example Scripts - WikiExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example ScriptsOutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - WikiOutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - DownloadOutlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - WikiPowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - WikiTask Scheduler (NEW 2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki Standard UDFs:Excel - Example Scripts - WikiWord - Wiki Tutorials:ADO - WikiWebDriver - Wiki  Link to comment Share on other sites More sharing options...
cristii88bic Posted October 9, 2009 Share Posted October 9, 2009 Your problem was that your 'If $_CorR = 2' was tested inside the 'If $_CorR = 4'...'endif' and therefore you couldn't exit. And one more thing if you click retry repeatedly you get multiple instances of your main window. Good luck! Link to comment Share on other sites More sharing options...
jebus495 Posted October 9, 2009 Author Share Posted October 9, 2009 (edited) jebus495, You are calling your _GUI function recursively - that is it is being called again by _install before it ends - and this always leads to problems unless you know exactly what you are doing. Try replacing your _install function with this one: Func _install() $existcase = FileExists($Input1 & "\game.exe") If $existcase = 0 Then ; File does not exist so see what to do next Switch MsgBox(21, "Path incorrect", "Enter correct path or cancel.") ; This is "Retry" Case 4 GUISetState(@SW_SHOW) ;_GUI() ; Do NOT call function recursively - the GUI is already there! Return Case 2 Exit EndSwitch Else ; File exists so do the installing stuff EndIf EndFunc ;==>_install I have altered the MsgBox code a bit to make it tighter - I hope you can see what I have done and why. Please ask if not. M23 AWESOME! I guess I assumed that the GUI would just go away when it left the function. I also made a goof with this: $existcase = FileExists($Input1 & "\game.exe") Lol... Should be: $d2_dir = GUICtrlRead($Input1) $existcase = FileExists($d2_dir & "\game.exe") Thank you very much for the help. Made a few things much clearer for me! Edit: Thanks for all the speedy replies Edit: Edit: Actually... $existcase = FileExists(GUICtrlRead($Input1) & "\game.exe") XD Edited October 12, 2009 by jebus495 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