Jump to content

How to wrap a function with optional parameters?


Recommended Posts

Hello!

I'm a newbie in AutoIt and want to wrap some internal autoit functions like RegWrite() in way function will display MsgBox with of error happens.

I want to wrap because write error handler becomes really annoying when it comes to code, and I have to write the same code after every RegWrite() call and this becomes really ugly. So I just want this:

Local $s_key        = 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control'
Local $s_value_name = 'value1'
Local $s_value_type = 'REG_SZ'
Local $value_data   = 'data1'

RegWrite( $s_key , $s_value_name , $s_value_type, $value_data )

If @error Then
    MsgBox( $MB_ICONERROR , 'ERROR' , 'Error writing registry:' & @CRLF & 'Key: ' & $s_key & @CRLF & 'Value: ' & $s_value_name & @CRLF & 'Type: ' & $s_value_type & @CRLF & 'Data: ' & $value_data & @CRLF & 'ErrorCode: ' & @error )
EndIf


Local $s_key = 'HKEY_CURRENT_USER\Software\MyApp'

RegWrite( $s_key )

If @error Then
    MsgBox( $MB_ICONERROR , 'ERROR' , 'Error writing registry:' & @CRLF & 'Key: ' & $s_key & 'ErrorCode: ' & @error )
EndIf

Becomes into this:

RegistryWrite( 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control' , 'value1' , 'REG_SZ' , 'data1' )
RegistryWrite( 'HKEY_CURRENT_USER\Software\MyApp' )

Func RegistryWrite( $s_key , $s_value_name = NULL , $s_value_type = NULL , $value_data = NULL )

    RegWrite( $s_key , $s_value_name , $s_value_type, $value_data )

    If @error Then

        MsgBox( $MB_ICONERROR , 'ERROR' , 'Error writing registry:' & @CRLF & 'Key: ' & $s_key & @CRLF & 'Value: ' & $s_value_name & @CRLF & 'Type: ' & $s_value_type & @CRLF & 'Data: ' & $value_data & @CRLF & 'ErrorCode: ' & @error )

    EndIf

EndFunc

And I'm just confused how to properly pass the optional parameters to target function as documentation says that NULL can be evaluated as 0 in mathematical expressions. Maybe "Default" or something else is more suitable?

I undersand that I can write separate wrappers for each number of arguments or handle each optional argument value and call target function with exact arguments number, but the goal is to keep code as clean and as simple as possible.

So i have two questions:

1. What is the _proper_ and maybe universal way to pass optional parameters to wrapped functions?

2. Can I achive the same result without wrapping every function? Maybe some AutoIt execution flags to always popup a error that happens and stop execution?

Link to comment
Share on other sites

1. Use the default keyword

2. No there isn't

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 parsingAutoIt SearchAutoIt3 PortableAutoIt3WrapperToPragmaAutoItWinGetTitle()/AutoItWinSetTitle()CodingDirToHTML5FileInstallrFileReadLastChars()GeoIP databaseGUI - Only Close ButtonGUI ExamplesGUICtrlDeleteImage()GUICtrlGetBkColor()GUICtrlGetStyle()GUIEventsGUIGetBkColor()Int_Parse() & Int_TryParse()IsISBN()LockFile()Mapping CtrlIDsOOP in AutoItParseHeadersToSciTE()PasswordValidPasteBinPosts Per DayPreExpandProtect GlobalsQueue()Resource UpdateResourcesExSciTE JumpSettings INISHELLHOOKShunting-YardSignature CreatorStack()Stopwatch()StringAddLF()/StringStripLF()StringEOLToCRLF()VSCROLLWM_COPYDATAMore Examples...

Updated: 22/04/2018

Link to comment
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
 Share

×
×
  • Create New...