Chimaera Posted March 20, 2013 Share Posted March 20, 2013 Ok im probably guessing this will be a no but ill ask anyway I have 4 small functions that are all for one task which is checking windows updates These are the functions Func _CollectPatches() Local $oMyError = ObjEvent("AutoIt.Error", "MyErrFunc") #forceref $oMYError Local $objSearcher = _CreateSearcher(_CreateMSUpdateSession()) $colNeeded = _GetNeededUpdates($objSearcher) $objSearcher = 0 Return $colNeeded EndFunc ;==>_CollectPatches Func _CreateSearcher($objSession) If Not IsObj($objSession) Then Return -1 Return $objSession.CreateUpdateSearcher EndFunc ;==>_CreateSearcher Func _CreateMSUpdateSession($strHost = @ComputerName) Local $objSession = ObjCreate("Microsoft.Update.Session", $strHost) If Not IsObj($objSession) Then Return 0 Return $objSession EndFunc ;==>_CreateMSUpdateSession Func _GetNeededUpdates($objSearcher) SplashTextOn("Please Wait", "Checking For Updates", 220, 40, -1, -1, 18, "Tahoma", 11) If Not IsObj($objSearcher) Then Return -5 $colNeeded = $objSearcher.Search("IsInstalled=0 and Type='Software'") SplashOff() Sleep(800) Return $colNeeded EndFunc ;==>_GetNeededUpdates It would be great if i could include the secondary functions in a sub func so that they are contained within the main function This is just an example to give you the idea of what i mean Func _CollectPatches() Local $oMyError = ObjEvent("AutoIt.Error", "MyErrFunc") #forceref $oMYError Local $objSearcher = _CreateSearcher(_CreateMSUpdateSession()) Func _CreateSearcher($objSession) If Not IsObj($objSession) Then Return -1 Return $objSession.CreateUpdateSearcher EndFunc ;==>_CreateSearcher Func _CreateMSUpdateSession($strHost = @ComputerName) Local $objSession = ObjCreate("Microsoft.Update.Session", $strHost) If Not IsObj($objSession) Then Return 0 Return $objSession EndFunc ;==>_CreateMSUpdateSession $colNeeded = _GetNeededUpdates($objSearcher) $objSearcher = 0 Func _GetNeededUpdates($objSearcher) SplashTextOn("Please Wait", "Checking For Updates", 220, 40, -1, -1, 18, "Tahoma", 11) If Not IsObj($objSearcher) Then Return -5 $colNeeded = $objSearcher.Search("IsInstalled=0 and Type='Software'") SplashOff() Sleep(800) Return $colNeeded EndFunc ;==>_GetNeededUpdates Return $colNeeded EndFunc ;==>_CollectPatches Its just a question does this exist in coding in general and hopefully AutoIT If Ive just helped you ... miracles do happen. Chimaera CopyRobo() * Hidden Admin Account Enabler * Software Location From Registry * Find Display Resolution * _ChangeServices() Link to comment Share on other sites More sharing options...
BrewManNH Posted March 20, 2013 Share Posted March 20, 2013 Functions can not be inside another function, you can call the other functions from inside the first, but you can't contain them in it. It wouldn't make sense to put it inside, because a function is ignored by a script until you call it. So putting it inside one doesn't make it run it. If I posted any code, assume that code was written using the latest release version unless stated otherwise. Also, if it doesn't work on XP I can't help with that because I don't have access to XP, and I'm not going to.Give a programmer the correct code and he can do his work for a day. Teach a programmer to debug and he can do his work for a lifetime - by Chirag GudeHow to ask questions the smart way! I hereby grant any person the right to use any code I post, that I am the original author of, on the autoitscript.com forums, unless I've specifically stated otherwise in the code or the thread post. If you do use my code all I ask, as a courtesy, is to make note of where you got it from. Back up and restore Windows user files _Array.au3 - Modified array functions that include support for 2D arrays. - ColorChooser - An add-on for SciTE that pops up a color dialog so you can select and paste a color code into a script. - Customizable Splashscreen GUI w/Progress Bar - Create a custom "splash screen" GUI with a progress bar and custom label. - _FileGetProperty - Retrieve the properties of a file - SciTE Toolbar - A toolbar demo for use with the SciTE editor - GUIRegisterMsg demo - Demo script to show how to use the Windows messages to interact with controls and your GUI. - Latin Square password generator Link to comment Share on other sites More sharing options...
guinness Posted March 20, 2013 Share Posted March 20, 2013 Nested functions, nice idea Chimaera, but currently not possible in AutoIt v3.3.8.1 or the beta versions. UDF List: _AdapterConnections() • _AlwaysRun() • _AppMon() • _AppMonEx() • _ArrayFilter/_ArrayReduce • _BinaryBin() • _CheckMsgBox() • _CmdLineRaw() • _ContextMenu() • _ConvertLHWebColor()/_ConvertSHWebColor() • _DesktopDimensions() • _DisplayPassword() • _DotNet_Load()/_DotNet_Unload() • _Fibonacci() • _FileCompare() • _FileCompareContents() • _FileNameByHandle() • _FilePrefix/SRE() • _FindInFile() • _GetBackgroundColor()/_SetBackgroundColor() • _GetConrolID() • _GetCtrlClass() • _GetDirectoryFormat() • _GetDriveMediaType() • _GetFilename()/_GetFilenameExt() • _GetHardwareID() • _GetIP() • _GetIP_Country() • _GetOSLanguage() • _GetSavedSource() • _GetStringSize() • _GetSystemPaths() • _GetURLImage() • _GIFImage() • _GoogleWeather() • _GUICtrlCreateGroup() • _GUICtrlListBox_CreateArray() • _GUICtrlListView_CreateArray() • _GUICtrlListView_SaveCSV() • _GUICtrlListView_SaveHTML() • _GUICtrlListView_SaveTxt() • _GUICtrlListView_SaveXML() • _GUICtrlMenu_Recent() • _GUICtrlMenu_SetItemImage() • _GUICtrlTreeView_CreateArray() • _GUIDisable() • _GUIImageList_SetIconFromHandle() • _GUIRegisterMsg() • _GUISetIcon() • _Icon_Clear()/_Icon_Set() • _IdleTime() • _InetGet() • _InetGetGUI() • _InetGetProgress() • _IPDetails() • _IsFileOlder() • _IsGUID() • _IsHex() • _IsPalindrome() • _IsRegKey() • _IsStringRegExp() • _IsSystemDrive() • _IsUPX() • _IsValidType() • _IsWebColor() • _Language() • _Log() • _MicrosoftInternetConnectivity() • _MSDNDataType() • _PathFull/GetRelative/Split() • _PathSplitEx() • _PrintFromArray() • _ProgressSetMarquee() • _ReDim() • _RockPaperScissors()/_RockPaperScissorsLizardSpock() • _ScrollingCredits • _SelfDelete() • _SelfRename() • _SelfUpdate() • _SendTo() • _ShellAll() • _ShellFile() • _ShellFolder() • _SingletonHWID() • _SingletonPID() • _Startup() • _StringCompact() • _StringIsValid() • _StringRegExpMetaCharacters() • _StringReplaceWholeWord() • _StringStripChars() • _Temperature() • _TrialPeriod() • _UKToUSDate()/_USToUKDate() • _WinAPI_Create_CTL_CODE() • _WinAPI_CreateGUID() • _WMIDateStringToDate()/_DateToWMIDateString() • Au3 script parsing • AutoIt Search • AutoIt3 Portable • AutoIt3WrapperToPragma • AutoItWinGetTitle()/AutoItWinSetTitle() • Coding • DirToHTML5 • FileInstallr • FileReadLastChars() • GeoIP database • GUI - Only Close Button • GUI Examples • GUICtrlDeleteImage() • GUICtrlGetBkColor() • GUICtrlGetStyle() • GUIEvents • GUIGetBkColor() • Int_Parse() & Int_TryParse() • IsISBN() • LockFile() • Mapping CtrlIDs • OOP in AutoIt • ParseHeadersToSciTE() • PasswordValid • PasteBin • Posts Per Day • PreExpand • Protect Globals • Queue() • Resource Update • ResourcesEx • SciTE Jump • Settings INI • SHELLHOOK • Shunting-Yard • Signature Creator • Stack() • Stopwatch() • StringAddLF()/StringStripLF() • StringEOLToCRLF() • VSCROLL • WM_COPYDATA • More Examples... Updated: 22/04/2018 Link to comment Share on other sites More sharing options...
Chimaera Posted March 20, 2013 Author Share Posted March 20, 2013 (edited) Its more for completness as i have to remember what all of them do, if they had been inside its easy to see needed parts of the main function. Like i say it was just a thought Presumably we would need a SubFunc key for it Edited March 20, 2013 by Chimaera If Ive just helped you ... miracles do happen. Chimaera CopyRobo() * Hidden Admin Account Enabler * Software Location From Registry * Find Display Resolution * _ChangeServices() Link to comment Share on other sites More sharing options...
FireFox Posted March 20, 2013 Share Posted March 20, 2013 (edited) Function within a func ?INCEPTION.You can do it in javascript and in some other languages. Edited March 20, 2013 by FireFox Link to comment Share on other sites More sharing options...
water Posted March 20, 2013 Share Posted March 20, 2013 This is not possible at the moment My UDFs and Tutorials: Spoiler UDFs: Active Directory (NEW 2024-07-28 - Version 1.6.3.0) - Download - General Help & Support - Example Scripts - Wiki ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts OutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - Wiki OutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - Download Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki PowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - Wiki Task Scheduler (2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki Standard UDFs: Excel - Example Scripts - Wiki Word - Wiki Tutorials: ADO - Wiki WebDriver - Wiki Link to comment Share on other sites More sharing options...
TheSaint Posted March 20, 2013 Share Posted March 20, 2013 @Chimaera - I'm not sure why the other MVP's here aren't pulling you up on this, but the Chat section is not to be used for talking code. You should be posting this and some of your other questions in General Help or Examples if relevant.If you look at the top of the Chat Forum, it clearly states this is for Non-AutoIt chats.This is where us programmers come to get away from programming.If we let you get away with it, then we have to let all the others, and then this section is no longer a recluse. Make sure brain is in gear before opening mouth! Remember, what is not said, can be just as important as what is said. Spoiler What is the Secret Key? Life is like a Donut If I put effort into communication, I expect you to read properly & fully, or just not comment. Ignoring those who try to divert conversation with irrelevancies. If I'm intent on insulting you or being rude, I will be obvious, not ambiguous about it. I'm only big and bad, to those who have an over-active imagination. I may have the Artistic Liesense to disagree with you. TheSaint's Toolbox (be advised many downloads are not working due to ISP screwup with my storage) Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted March 20, 2013 Moderators Share Posted March 20, 2013 (edited) Chimaera, TheSaint has a point - please post in the correct section in future. M23 Edited March 20, 2013 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...
czardas Posted March 20, 2013 Share Posted March 20, 2013 (edited) ...i have to remember what all of them do...This is where comments come in very handy. Describe what each function does when you call it from within your main function. This stops you forgetting what things do. If necessary make a comment about the type of return value, or the method used to return the data. Name your functions in a clear and unambiguous way. Stick to plain English. Edited March 20, 2013 by czardas operator64 ArrayWorkshop Link to comment Share on other sites More sharing options...
FireFox Posted March 20, 2013 Share Posted March 20, 2013 I don't see the purpose of nested functions yet in AutoIt, except for tidying the script... Link to comment Share on other sites More sharing options...
jaberwacky Posted March 20, 2013 Share Posted March 20, 2013 I'm pretty sure that this is what is known as a closure. Functional programming languages have these. lua has it too as well as PHP. Helpful Posts and Websites: AutoIt3 Variables and Function Parameters MHz | AutoIt Wiki | Using the GUIToolTip UDF BrewManNH | Can't find what you're looking for on the Forum? Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted March 20, 2013 Moderators Share Posted March 20, 2013 FireFox,I don't see the purpose of nested functions yet in AutoItFrom the little I have seen, it appeared that the internal functions could use Local variables from the external function directly - which would reduce the need for passing parameters. That would be a huge benefit in my opinion. 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...
FireFox Posted March 20, 2013 Share Posted March 20, 2013 (edited) From the little I have seen, it appeared that the internal functions could use Local variables from the external function directly - which would reduce the need for passing parameters. That would be a huge benefit in my opinion. oh I did not notice that. You have a point too Edit: Something like this I suppose : Func _Main() Local $sString = "toto" _Nested() ;would output "toto" Func _Nested() ConsoleWrite($sString & @CrLf) EndFunc EndFunc Edited March 20, 2013 by FireFox Link to comment Share on other sites More sharing options...
Chimaera Posted March 20, 2013 Author Share Posted March 20, 2013 (edited) Ok Melba and Saint Its not actually code though as it doesn't exist in autoit so its just chat about theory Just kidding... @czardas i do comment m8, it was just something that occured to me. Edited March 20, 2013 by Chimaera If Ive just helped you ... miracles do happen. Chimaera CopyRobo() * Hidden Admin Account Enabler * Software Location From Registry * Find Display Resolution * _ChangeServices() Link to comment Share on other sites More sharing options...
DW1 Posted March 20, 2013 Share Posted March 20, 2013 If simply for organization, you could just put all the related functions in a region: #region Windows Updates Func _CollectPatches() Local $oMyError = ObjEvent("AutoIt.Error", "MyErrFunc") #forceref $oMYError Local $objSearcher = _CreateSearcher(_CreateMSUpdateSession()) $colNeeded = _GetNeededUpdates($objSearcher) $objSearcher = 0 Return $colNeeded EndFunc ;==>_CollectPatches Func _CreateSearcher($objSession) If Not IsObj($objSession) Then Return -1 Return $objSession.CreateUpdateSearcher EndFunc ;==>_CreateSearcher Func _CreateMSUpdateSession($strHost = @ComputerName) Local $objSession = ObjCreate("Microsoft.Update.Session", $strHost) If Not IsObj($objSession) Then Return 0 Return $objSession EndFunc ;==>_CreateMSUpdateSession Func _GetNeededUpdates($objSearcher) SplashTextOn("Please Wait", "Checking For Updates", 220, 40, -1, -1, 18, "Tahoma", 11) If Not IsObj($objSearcher) Then Return -5 $colNeeded = $objSearcher.Search("IsInstalled=0 and Type='Software'") SplashOff() Sleep(800) Return $colNeeded EndFunc ;==>_GetNeededUpdates #endregion Windows Updates AutoIt3 Online Help Link to comment Share on other sites More sharing options...
Chimaera Posted March 20, 2013 Author Share Posted March 20, 2013 not a bad idea danwilli thx If Ive just helped you ... miracles do happen. Chimaera CopyRobo() * Hidden Admin Account Enabler * Software Location From Registry * Find Display Resolution * _ChangeServices() Link to comment Share on other sites More sharing options...
guinness Posted March 21, 2013 Share Posted March 21, 2013 Thank goodness for SciTE Jump recognising regions. FireFox 1 UDF List: _AdapterConnections() • _AlwaysRun() • _AppMon() • _AppMonEx() • _ArrayFilter/_ArrayReduce • _BinaryBin() • _CheckMsgBox() • _CmdLineRaw() • _ContextMenu() • _ConvertLHWebColor()/_ConvertSHWebColor() • _DesktopDimensions() • _DisplayPassword() • _DotNet_Load()/_DotNet_Unload() • _Fibonacci() • _FileCompare() • _FileCompareContents() • _FileNameByHandle() • _FilePrefix/SRE() • _FindInFile() • _GetBackgroundColor()/_SetBackgroundColor() • _GetConrolID() • _GetCtrlClass() • _GetDirectoryFormat() • _GetDriveMediaType() • _GetFilename()/_GetFilenameExt() • _GetHardwareID() • _GetIP() • _GetIP_Country() • _GetOSLanguage() • _GetSavedSource() • _GetStringSize() • _GetSystemPaths() • _GetURLImage() • _GIFImage() • _GoogleWeather() • _GUICtrlCreateGroup() • _GUICtrlListBox_CreateArray() • _GUICtrlListView_CreateArray() • _GUICtrlListView_SaveCSV() • _GUICtrlListView_SaveHTML() • _GUICtrlListView_SaveTxt() • _GUICtrlListView_SaveXML() • _GUICtrlMenu_Recent() • _GUICtrlMenu_SetItemImage() • _GUICtrlTreeView_CreateArray() • _GUIDisable() • _GUIImageList_SetIconFromHandle() • _GUIRegisterMsg() • _GUISetIcon() • _Icon_Clear()/_Icon_Set() • _IdleTime() • _InetGet() • _InetGetGUI() • _InetGetProgress() • _IPDetails() • _IsFileOlder() • _IsGUID() • _IsHex() • _IsPalindrome() • _IsRegKey() • _IsStringRegExp() • _IsSystemDrive() • _IsUPX() • _IsValidType() • _IsWebColor() • _Language() • _Log() • _MicrosoftInternetConnectivity() • _MSDNDataType() • _PathFull/GetRelative/Split() • _PathSplitEx() • _PrintFromArray() • _ProgressSetMarquee() • _ReDim() • _RockPaperScissors()/_RockPaperScissorsLizardSpock() • _ScrollingCredits • _SelfDelete() • _SelfRename() • _SelfUpdate() • _SendTo() • _ShellAll() • _ShellFile() • _ShellFolder() • _SingletonHWID() • _SingletonPID() • _Startup() • _StringCompact() • _StringIsValid() • _StringRegExpMetaCharacters() • _StringReplaceWholeWord() • _StringStripChars() • _Temperature() • _TrialPeriod() • _UKToUSDate()/_USToUKDate() • _WinAPI_Create_CTL_CODE() • _WinAPI_CreateGUID() • _WMIDateStringToDate()/_DateToWMIDateString() • Au3 script parsing • AutoIt Search • AutoIt3 Portable • AutoIt3WrapperToPragma • AutoItWinGetTitle()/AutoItWinSetTitle() • Coding • DirToHTML5 • FileInstallr • FileReadLastChars() • GeoIP database • GUI - Only Close Button • GUI Examples • GUICtrlDeleteImage() • GUICtrlGetBkColor() • GUICtrlGetStyle() • GUIEvents • GUIGetBkColor() • Int_Parse() & Int_TryParse() • IsISBN() • LockFile() • Mapping CtrlIDs • OOP in AutoIt • ParseHeadersToSciTE() • PasswordValid • PasteBin • Posts Per Day • PreExpand • Protect Globals • Queue() • Resource Update • ResourcesEx • SciTE Jump • Settings INI • SHELLHOOK • Shunting-Yard • Signature Creator • Stack() • Stopwatch() • StringAddLF()/StringStripLF() • StringEOLToCRLF() • VSCROLL • WM_COPYDATA • More Examples... Updated: 22/04/2018 Link to comment Share on other sites More sharing options...
RichardL Posted March 21, 2013 Share Posted March 21, 2013 I worked with Modula-2 for years, inherited some messy programs and eliminated hundreds of lines using local 'Procedures' (=functions). Link to comment Share on other sites More sharing options...
FireFox Posted March 21, 2013 Share Posted March 21, 2013 Thank goodness for SciTE Jump recognising regions.It's one of the reasons why I use regions Link to comment Share on other sites More sharing options...
trancexx Posted March 21, 2013 Share Posted March 21, 2013 These kind of functions were added to AutoIt while I was developer (and more). The concept is there and implementation only needs few tweaks. They are beautiful features that you probably wouldn't ever see as part of AutoIt because that's what happens when language developer doesn't use the language he's developing. FireFox 1 ♡♡♡ . eMyvnE 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