User Tools

Site Tools


AppleScript

**This is an old revision of the document!**

Using AppleScript to Get and Set Keyboard Maestro Variables


Get and Set Variables

Keyboard Maestro Version 7.1 introduced a streamlined way to Get and Set Keyboard Maestro Variables from AppleScript.

In AppleScript, you can tell the application “Keyboard Maestro Engine” to:

getvariable <KM Variable Name>
setvariable <KM Variable Name> to <New Value>

where both the <KM Variable Name> and <New Value> are text values.

Examples

snippet.applescript
### Requires Keyboard Maestro 7.1+ ###
 
--- Set AppleScript Variables to KM Variable Name and Value ---
set myKMVar to "My KM Var Name"
set myASVar to "TBD" -- default value of KM variable, will be updated
 
tell application "Keyboard Maestro Engine"
 
  ### GET ###
  -- IF KM Variable does NOT exist, the AS Variable will be set to empty string --
 
  -- Use Explicit Quoted Text --
  set myASVar to getvariable "My KM Var Name"
  -- OR, Use Previously Defined AppleScript Variables --
  set myASVar to getvariable myKMVar
 
 
 
  ### SET ###
  -- IF KM Variable does NOT exist, it will be created --
 
  -- Use Explicit Quoted Text --
  setvariable "My KM Var Name" to "A new value"
  -- OR, Use Previously Defined AppleScript Variables --
  setvariable myKMVar to myASVar
 
end tell

Normally, you would not have both a GET and a SET variable within the same AppleScript tell block.
Here's a real-world example, but with the error checking removed to simplify.

snippet.applescript
--- GET REQUIRED KM VARIABLES ---
 
tell application "Keyboard Maestro Engine"
  set mainStr to getvariable "SCPT__MainString"
  set subStr to getvariable "SCPT__StringToFind"
end tell
 
--- PROCESS THESE KM VARIABLES ---
 
--- Get Start of StringToFind ---
set posSubStr to offset of subStr in mainStr
 
--- SET OUTPUT KM VARIABLE ---
 
tell application "Keyboard Maestro Engine" to setvariable "SCPT__PosSubStr" to posSubStr

For more details, see Scripting article in the Manual Section.


Prior to Ver 7.1

  • All of the below scripts were designed for use with Keyboard Maestro prior to version 7.1, but they will still work with the latest version.
  • They present an alternate method.

Set Variable

(will be created if necessary)

snippet.applescript
my setKMVar("MY_KM_Variable", "some new value")
 
on setKMVar(pKMVarNameStr, pValueStr)
 
  --- Compatible with Keyboard Maestro 6+ ---
  --     • Creates the KM Variable if does not exist (just like KM 7 setvariable)
  --     • Returns true if new Variable was created
 
  set varCreatedBool to false
 
  tell application "Keyboard Maestro Engine"
    try
      set value of variable pKMVarNameStr to pValueStr
 
    on error errMsg number errNum
      if (errNum = -10006) then --- KM Variable Does NOT Exist ---
 
        --- Create & Set KM Variable ---
        make new variable with properties {name:pKMVarNameStr, value:pValueStr}
        set varCreatedBool to true
 
      else
        error ("Error " & errNum & ":  " & errMsg)
      end if
      -- END on error
 
    end try
  end tell
 
  return varCreatedBool
 
end setKMVar

Get Variable

(returns empty string “” if Variable does not exist)

snippet.applescript
set myKMVar to my getKMVar("MY_KM_Variable")
 
on getKMVar(pKMVarNameStr)
 
  --- Compatible with Keyboard Maestro 6+ ---
  --     • Returns "" if variable is not found (just like KM 7 getvariable)
 
  tell application "Keyboard Maestro Engine"
    try
      set kmVar to value of variable pKMVarNameStr
 
    on error errMsg number errNum
      if (errNum = -1728) then
        --- KM Variable NOT Found ---
        set kmVar to ""
      else
        error errMsg
      end if
      -- END on error
 
    end try
  end tell
 
  return kmVar
 
end getKMVar
AppleScript.1496629097.txt.gz · Last modified: 2017/06/04 22:18 by JMichaelTX