undefinedspace Posted May 30, 2014 Share Posted May 30, 2014 (edited) HotKeySet("!a", "funca") func funca($a=20,$b=100000) $b=$b-1 Error! when hotkeyed, var used without being declared! func funca($a=20,$b=100000) local $b Error! when f5 go, already declared as a parameter var and func names changed Edited May 30, 2014 by undefinedspace Link to comment Share on other sites More sharing options...
Danp2 Posted May 30, 2014 Share Posted May 30, 2014 You can't pass parameters to a function using HotKeySet. Latest Webdriver UDF Release Webdriver Wiki FAQs Link to comment Share on other sites More sharing options...
BrewManNH Posted May 30, 2014 Share Posted May 30, 2014 You can't use a function with parameters with HotKeys (or OnEvent, or Adlib for that matter), the parameter variables aren't accessible so they cause an undeclared error message. 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...
Moderators Melba23 Posted May 30, 2014 Moderators Share Posted May 30, 2014 undefinedspace,First, welcome to the AutoIt forums. From the Help file page for HotKeySet: The called function can not be given parameters. They will be ignored.So it is hardly surprising you get those errors. 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...
jdelaney Posted May 30, 2014 Share Posted May 30, 2014 Initiate global variables as your default at the start of your script...you can then subtract from them, or whatever (not passed as a param to the function) $var=1234 hotkeyset... func yourfunction() $var -=1 ... endfunc IEbyXPATH-Grab IE DOM objects by XPATH IEscriptRecord-Makings of an IE script recorder ExcelFromXML-Create Excel docs without excel installed GetAllWindowControls-Output all control data on a given window. Link to comment Share on other sites More sharing options...
undefinedspace Posted May 31, 2014 Author Share Posted May 31, 2014 Hi. But $a causes no errors and both parameters are optional. Using globals would require 2 vars. I could call the real function from a different one that sets the parameters. Link to comment Share on other sites More sharing options...
BrewManNH Posted May 31, 2014 Share Posted May 31, 2014 Using globals would require 2 vars. I could call the real function from a different one that sets the parameters. That would be the ONLY way to use the parameters in the function. As stated previously, a function with parameters won't be able to use the parameters if you use HotKeySet, or AdlibRegister, or OnEvent mode. 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...
undefinedspace Posted June 1, 2014 Author Share Posted June 1, 2014 But $a causes no errors and both parameters are optional. Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted June 1, 2014 Moderators Share Posted June 1, 2014 undefinedspace, $a causes no errorsThat is because you do not try to access $a in the script. Add a line which does and you will see that the error happens on that line: HotKeySet("!a", "funca") While 1 Sleep(10) WEnd Func funca($a = 20, $b = 100000) $a += 1 $b = $b - 1 EndFunc ;==>funcaM23 undefinedspace 1 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...
jguinch Posted June 1, 2014 Share Posted June 1, 2014 (edited) What about using @NumParams ? Func funca($a=20,$b=100000) If @NumParams = 0 Then Local $a=20, $b=100000 $b = $b-1 ConsoleWrite($b & @CRLF) EndFunc I will try it before posting, next time... Edited June 1, 2014 by jguinch Spoiler Network configuration UDF, _DirGetSizeByExtension, _UninstallList Firefox ConfigurationArray multi-dimensions, Printer Management UDF Link to comment Share on other sites More sharing options...
guinness Posted June 1, 2014 Share Posted June 1, 2014 @jguinch, Those parameters are already defined, no need for Local there. 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...
jguinch Posted June 1, 2014 Share Posted June 1, 2014 (edited) Edited... sorry. Guinness, why IsDeclared("a") returns 0, while $a is seen as declared ? Edited June 1, 2014 by jguinch Spoiler Network configuration UDF, _DirGetSizeByExtension, _UninstallList Firefox ConfigurationArray multi-dimensions, Printer Management UDF Link to comment Share on other sites More sharing options...
BrewManNH Posted June 1, 2014 Share Posted June 1, 2014 (edited) As stated previously, the parameters in a function that is called by a hotkey, or other methods already explained, will not be accessible, but AutoIt will see them as already defined and throw an error. EDIT: here's an example to show you what I mean. #AutoIt3Wrapper_Run_AU3Check=n HotKeySet("a", "Funca") HotKeySet("{esc}", "_Exit") Funca() While 1 sleep(10) WEnd Func _Exit() Exit EndFunc ;==>_Exit Func funca($a = 20, $b = 100000) If @NumParams = 0 Then Local $a = 10, $b = 1000 $b = $b - 1 ConsoleWrite($b & @CRLF) EndFunc ;==>funca If you remove the Funca() line after the hotkeysets, the function works perfectly. When you call the function directly though, you get an error about redeclaring a declared parameter. So, don't use any functions with parameters with a function that can't use them, such as HotKeySet. Edited June 1, 2014 by BrewManNH 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...
MHz Posted June 2, 2014 Share Posted June 2, 2014 You could use Assign() to get around the error check though I would not recommend using functions with parameters like that as it can get quite complicated, depending on the function and whether it is called by onevent or a direct call from the code. Example using Assign() based from BrewManNHs last code. HotKeySet("a", "Funca") HotKeySet("{esc}", "_Exit") Funca() While 1 sleep(10) WEnd Func _Exit() Exit EndFunc Func funca($a = 20, $b = 100000) If @NumParams = 0 Then If Not Assign('a', 20, 1) Then Return 0 If Not Assign('b', 100000, 1) Then Return 0 EndIf $b = $b - 1 ConsoleWrite($b & @CRLF) EndFunc Sure it works, for a simple function, but it is being fixed by a work around. Functions that accept parameters as arrays, objects etc will probably be unworkable. . Another way is to use a function as a event handler for all HotKeySet events. Example with _Event_HotKeySet() handling all hotkeys and thus able to call conditionally functions with parameters or what ever desired. It is a flexible concept. HotKeySet("a", "_Event_HotKeySet") HotKeySet("b", "_Event_HotKeySet") HotKeySet("{ESC}", "_Event_HotKeySet") While 1 Sleep(10) WEnd Exit Func _Event_HotKeySet() ; manage all hotkey events ConsoleWrite(@HotKeyPressed & @CRLF) Switch @HotKeyPressed Case 'a' _FuncA() Case 'b' _FuncB('title') Case '{ESC}' Exit Case Else MsgBox(0x40000, '_Event_HotKeySet()', 'No assigned for this event' & @CRLF & @HotKeyPressed) EndSwitch EndFunc Func _FuncA($a = 20, $b = 100000) $b = $b - 1 MsgBox(0x40000, $a, $b) EndFunc Func _FuncB($a = '') MsgBox(0x40000, $a, 'You pressed the hotkey ' & @HotKeyPressed) EndFunc It adds a little more complication of more functions in the script but it is more manageable and does no work around to get past the checks of Au3Check or AutoIt. Link to comment Share on other sites More sharing options...
jguinch Posted June 2, 2014 Share Posted June 2, 2014 Or you can call the function ifself : HotKeySet("a", "funca") HotKeySet("{ESC}", "_Quit") While 1 Sleep(10) WEnd Func funca($a = 20, $b = 100000) If NOT IsDeclared("a") OR NOT IsDeclared("b") Then Return funca() $b -= 1 ConsoleWrite($b & @CRLF) EndFunc Func _Quit() Exit EndFunc Spoiler Network configuration UDF, _DirGetSizeByExtension, _UninstallList Firefox ConfigurationArray multi-dimensions, Printer Management UDF 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