We had an awesome webinar today! Jean Lalonde, author of Quick Access Popup, lead us on a great webinar today regarding how to use GitHub to with our AutoHotkey scripts & programs. BTW we streamed the webinar live to this AutoHotkey Facebook group.
Runtime Errors– An error that occurs during the execution of a program
Use Error Handling to diagnose Runtime Errors for scripts distributed to clients
Allows you to adapt the reported error as something meaningful to non-coders
Frequently provides information you cannot get elsewhere
Easy to Log the error with additional information so we can have context of what is frequently going wrong (Users are typically terrible are providing enough information)
Can prevent the script from “locking up” / throwing an Error that is confusing to the client
Build-into your Class / Library to help others utilizing your code
A Built-in Function name/Object to call when your script is exiting
It can help understand why/when your script exited
There are 84 Built-in Command/Functions with Error Level
Try / Catch / Throw / Finally / Exception
Try– Will “try” to execute a given line(s) of code
Catch– Specifies the code to execute if an exception is raised during execution of a Try statement.
Throw– Signals the existence of an error allowing a Try/Catch command to display info about this error. This object allows you to personalize the message / information available
Finally– Used in conjunction with Try or Catch. Ensures that one or more statements (commands or expressions) are always executed after the execution of a try statement
Exception()- An Object with properties to be accessed from Catch’s OutputVar
Not all programs accurately report ErrorLevel when run from RunWait
–If this is the case, think of other ways to determine if your script finished correctly
Unless you truly have a need, don’t worry about Throw or Finally. Most developers do not use them
While typically used as pairs, Try can be used without Catch
— in this case, it is used only to bypass the error message
ComObjError()– can be set to 0 to disable COM errors (but isn’t recommended)
Copy the ErrorLevel value to your own variable immediately after the command that caused the error (before its content is changed after executing another command)
I work with people around the planet on a daily basis. 🙂 Being able to quickly share my code with my collaborators is super-easy with this AutoHotkey script that allows me to push my clipboard to the Internet.
Here is a short video demonstrating the script
Code showing how I push my clipboard to the Internet
#SingleInstance, Force
;***********clipbin / ahkbin on ahkscript.org *******************
#c:: ;Windows C will copy selected content, paste to ahkPasteBin and leave URL on your clipboard
SendPlay, ^c ;copy selected text to clipboard
ClipWait, 1 ;wait for clipboard to be populated
If ErrorLevel ;If nothing was copied to clipboard after 1 second
{
MsgBox, No text was sent to clipboard ;let user know nothing was copied to clipboard
Return
}
Clipboard:=mepaste(clipboard,"Your Name") ;Add your Name or just leave blank
ToolTip, The clipboard now has the following URL: %clipboard% ;show tooltip acknowledging URL is on clipboard
SetTimer, RemoveToolTip, 5000 ;hide tooltip after 5 seconds (this is better than "sleep"). Easy to change
;~ run %clipboard% ;Uncomment if you want to have it pop-open in your default browser
return
;****************Function for pasting to ahkscript.org pastebin****************
MePaste(Content,Name:=""){
Pbin:=ComObjCreate("WinHttp.WinHttpRequest.5.1") ;create object
Pbin.Open("POST", "http://p.ahkscript.org/", False) ;set-up POST request
Pbin.SetRequestHeader("Content-Type", "application/x-www-form-urlencoded") ;set header for API call
Pbin.Send("code=" UriEncode(Content) . "&name=" UriEncode(Name) . "&announce=on&channel=#ahkscript") ;send payload / Envelope
if pbin.Status()!=200 { ;if doesn't return 200 then there was a problem
MsgBox Something went wrong ;let user know something went wrong
return
}
return Pbin.Option(1) ;return url to user
}
;*********************URI Encode data*****clipboard to the Internet************
UriEncode(Uri, RE="[0-9A-Za-z]"){
VarSetCapacity(Var,StrPut(Uri,"UTF-8"),0),StrPut(Uri,&Var,"UTF-8")
While Code:=NumGet(Var,A_Index-1,"UChar")
Res.=(Chr:=Chr(Code))~=RE?Chr:Format("%{:02X}",Code)
Return,Res
}
;**************Timer to remove tooltip
RemoveToolTip:
SetTimer, RemoveToolTip, Off ;disable the timer
ToolTip ;clear the tooltip
return