AutoHotkey Webinar- CloudAHK / CloudAHK in a bottle is an AMAZING tool to launch in 2020

CloudAHKJune 2020 marks our 48th  AutoHotkey Webinar!

CloudAHK

AutoHotkey Webinar 08/2018 Hour 1-Helping work through scripts
AutoHotkey Webinar 08/2018 Hour 2-GeekDude explaining his work on CloudAHK / CloudAHK in a bottle

In Hour 2 GeekDude also explains how he was able to “pack up” all of the resources in

Podcasts

061  Hierarchy of Competence

062  Updating / Fixing Automate my Task

063  GUI RPA software & Computer Knowledge in the workplace

Udemy Courses

Alerts / Update newsletter from the-Automator

  • What I’ve automated
  • Cool scripts from forum / Facebook / Reddit, etc.
  • Podcast that week
  • Time-saving tip (not AutoHotkey related)

Subscribe to my alerts and be entered into chance to win 1 of 10  Intermediate AutoHotkey course giveaway!  The drawing will be held on June 31st

Script Highlight: Push to GIST

AutoHotkey Webinar- SQLite3 with AutoHotkey

SQLite3 with AutoHotkeyIn today’s webinar Jean Lalonde, author of Quick Access Popup, lead us through a demonstration how to use SQLite with AutoHotkey.

Video Hour 1:  High level overview

Video Hour 2: Continue overview and Q&A

Script Highlight: This was actually a “website” highlight.  Skrommel’s 1-hour Software is a great site with 116 examples of scripts that can manipulate various tasks on Windows.  His code is available both as an executable as well as the AutoHotkey source files.

SQLite3 with AutoHotkey

Here is a link to the SQLite3 with AutoHotkey files Jean shared and reviewed below

–SQLite files:

–Class_SQLiteDB library (by just me)

–Utility DB Browser for SQLite

SQLite-First_Example.ahk

  • Open an existing database

–Display error report

  • Query the database
    • in a RecordSet with Query()
    • in a Table with GetTable()
  • Execute various commands
    • Insert rows into a table
    • Delete rows

 

BLOB_Sample.ahk

  • Store and retrieve binary large objects (BLOB)

SQLite-TheBeatles.ahk

  • Create a new database
  • Create table and indexes
  • Insert multiple rows (import)
  • Display in a ListView with GetTable
  • Execute various commands
    • Alter table (add columns)
    • Vacuum the database

Using transactions

  • BEGIN TRANSACTION;
  • ROLLBAK:
  • COMMIT:

AutoHotkey webinar- Copying / Editing / Saving files & Folders

In this AutoHotkey Webinar we covered: Working with Files & Folders (Here are the files demonstrated during the webinar)

Video Hour 1: High-level:

  1. Moving / Copying / Deleting Files / Folders
    1. File Copy / Move
    2. File Delete
    3. Loop Files & Folders
  2. Creating / Editing Files
    1. File Encoding
    2. FileRead & FileAppend
    3. Loop FileRead & FileReadLine
    4. File Object

Video Hour 2: Q&A

AutoHotkey Merchandise-White Stress ballScript Highlight-  Locker

  • Kill power to monitors & block most keys & mouse
  • Great to use instead of using Windows + L and having to enter yoiur crazy corporate password

Copy, Move, Delete : Files & Folders

FileCopy – SourcePattern, DestPattern [, Flag]

  • FileCopy copies files only. To copy a single folder (including its subfolders), use FileCopyDir. To instead copy the contents of a folder (all its files and subfolders), see the examples section of FileCopy

FileCopyDir – FileCopyDir, Source, Dest [, Flag]

  • Copies a folder along with all its sub-folders and files (similar to xcopy)
  • FileCopyDir copies a single folder. If the destination directory structure doesn’t exist it will be created if possible

FileMove – FileMove, SourcePattern, DestPattern [, Flag]

  • FileMove moves files only. To move or rename a single folder, use FileMoveDir

FileDelete – FileDelete, FilePattern

  • To remove an entire folder, along with all its sub-folders and files, use FileRemoveDir
  • To delete a read-only file, first remove the read-only attribute. For example: FileSetAttrib, -R, C:\My File.txt

Looping Files & Folders

Loop (files & folders) – Loop, Files, FilePattern [, Mode]      Mode:  D=Directories, F=Files, R=Recursive

FilePattern: The name of a single file or folder, or a wildcard pattern

  • Retrieves the specified files or folders, one at a time
  • A file-loop is useful when you want to operate on a collection of files and/or folders, one at a time
  • The following Special Variables exist in any file-loop
    • A_LoopFileName
    • A_LoopFileExt
    • A_LoopFileFullPath
    • A_LoopFileLongPath
    • A_LoopFileShortPath
    • A_LoopFileShortName
    • A_LoopFileDir
    • A_LoopFileTimeModified
    • A_LoopFileTimeCreated
    • A_LoopFileTimeAccessed
    • A_LoopFileAttrib
    • A_LoopFileSize
    • A_LoopFileSizeKB
    • A_LoopFileSizeMB


File Encoding

  • Sets the default encoding for FileReadFileReadLineLoop ReadFileAppend, and FileOpen
  • Encoding can be one of the following values:
  • UTF-8: Unicode UTF-8, equivalent to CP65001
  • UTF-16: Unicode UTF-16 with little endian byte order, equivalent to CP1200
  • UTF-8-RAW or UTF-16-RAW: As above, but no Byte Order Mark (BOM*) is written when a new file is created
  • CPnnn: a code page with numeric identifier nnn. See Code Page Identifiers. (UTF-8 is CP65001, UTF-16 is CP1200)
  • Empty or omitted: the system default ANSI code page, which is also the default setting* The byte order mark (BOM) is a Unicode character, U+FEFF byte order mark (BOM), whose appearance as a magic number at the start of a text stream can signal several things to a program consuming the text

FileRead & FileAppend

File Read FileRead, OutputVar, Filename

  • Reads file’s content into a variable
  • FileRead, Var, *P65001 %file_path% ;-Read in the file using UTF-8 Encoding
  • When the goal is to load all or a large part of a file into memory, FileRead performs much better than using a file-reading loop.
  • FileOpen() provides more advanced functionality than FileRead, such as reading or writing data at a specific location in the file without reading the entire file into memory
  • When Reading / Writing to a file many times, FileObject is much faster as it does not open/close the file each time

FileAppend FileAppend [, Text, Filename, Encoding]

  • Writes text to the end of a file (first creating the file, if necessary)
  • FileAppend,%data%,%File_Name%.txt,UTF-8
  • To overwrite an existing file, delete it with FileDelete prior to using FileAppend
  • * don’t forget to add a line break at the end of each row!

LoopFileRead, FileReadLine

Loop (read file contents)   Loop, Read, InputFile [,OutputFile]

  • A file-reading loop is useful when you want to operate on each line contained in a text file, one at a time. It performs better than using FileReadLine because:
    • the file can be kept open for the entire operation
    • the file does not have to be re-scanned each time to find the requested line number.
  • Lines up to 65,534 characters long can be read. If the length of a line exceeds this, its remaining characters will be read during the next loop iteration
  • To load an entire file into a variable, use FileRead because it performs much better than a loop (especially for large files).

FileReadLine  FileReadLine, OutputVar, Filename, LineNum

  • Reads the specified line from a file and stores the text in a variable
  • It is strongly recommended to use this command only for small files, or in cases where only a single line of text is needed. To scan and process a large number of lines (one by one), use a file-reading loopfor best performance. To read an entire file into a variable, use FileRead

FileObject

FileOpen – file := FileOpen(Filename, Flags [, Encoding])

  • Flags (r=Read, w=Write, a=Append, rw=Read/Write , h=Handle, -rwd=Lock file/deny access)

ReadLine–  TextLine := File.ReadLine()

  • Reads a line of text from the file and advances the file pointer

Seek–  TextLine := File.Seek()

  • Distance to move, in bytes. Lower values are closer to the beginning of the file

AtEOF (End of File)- IsAtEOF := File.AtEOF

  • Retrieves a non-zero value if the file pointer has reached the end of the file, otherwise zero.

WriteLine–  File.WriteLine([String])

  • Writes a string of characters followed by `n or `r`n depending on the flags used to open the file. Advances the file pointer

Encoding– File.Encoding

  • RetrievedEncoding and NewEncoding is a numeric code page identifier (e.g. CP65001)

Close–  File.Close()

  • Although the file is closed automatically when the object is freed, it is recommended to close the file as soon as possible

COM Objects & DLL call

Example Webservice / API call- Connecting to Zoom & extracting info

For the the AutoHotkey Webinars we use Zoom which is a great, robust, inexpensive tool for hosting online meetings/webinars.  They have a free version which allows you to connect with people for up to 45 minutes!

Below I walk through the following code where I demonstrate how I extract information about users & their meetings.   This is a great example of how many vendors offer APIs to connect to their tools.

IniRead, API_Token ,Auth.ini,API, Token
IniRead, API_Key   ,Auth.ini,API, Key
IniRead, API_Secret,Auth.ini,API, Secret

;~  EndPoint:="https://api.zoom.us/v1/user/list" ;get list of users under your account
;~  EndPoint:="https://api.zoom.us/v1/meeting/list" ;get list of meetings for a given user
EndPoint:="https://api.zoom.us/v1/meeting/get" ;get specific meeting info
;~  QueryString:=QueryString_Builder({"api_key":API_Key,"api_secret":API_Secret,"data_type":"XML","host_id":"pPzEua3eSDerCD2WO3JbUg"})
QueryString:=QueryString_Builder({"api_key":API_Key,"api_secret":API_Secret,"data_type":"XML","id":"693773857","host_id":"pPzEua3eSDerCD2WO3JbUg"})

;********API call**********************
HTTP := ComObjCreate("WinHttp.WinHttpRequest.5.1") ;Create COM Object
HTTP.Open("POST", EndPoint . QueryString) ;GET & POST are most frequent, Make sure you UPPERCASE
HTTP.Send() ;If POST request put data in "Payload" variable
Response_data:= HTTP.ResponseText ;Save the text that is returned
SciTE_Output(Response_data) ;Text,Clear=1,LineBreak=1,Exit=0

;***********query string builder******************* 
QueryString_Builder(kvp){
for key, value in kvp
  queryString.=((A_Index="1")?(url "?"):("&")) key "=" value
return queryString
}

Video walking through developing the Zoom API call