User Tools

Site Tools


AppleScript

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
AppleScript [2017/01/06 17:49]
JMichaelTX [Get and Set Variables] Revised per @Tome
AppleScript [2019/03/28 14:41] (current)
JMichaelTX ADD tell block to first example.
Line 1: Line 1:
 ====== Using AppleScript to Get and Set Keyboard Maestro Variables ====== ====== 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. 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:
 +
 +```applescript
 +tell application "​Keyboard Maestro Engine"​
 +    getvariable <KM Variable Name>
 +    setvariable <KM Variable Name> to <New Value>
 +end tell
 +```
 +
 +where both the `<KM Variable Name>` and `<New Value>` are text values.
 +
 +**For more details, see:**
 +  - [[manual:​Scripting|Scripting article in the Manual Section]].
 +  - [[action:​Execute_an_AppleScript|Execute AppleScript Action]].
 +
 +===== Global Variables =====
 +
 +Global Variables (available in //all// macros) may be got and set like this:
  
 ```applescript ```applescript
Line 16: Line 33:
   ### GET ###   ### GET ###
   -- IF KM Variable does NOT exist, the AS Variable will be set to empty string --   -- 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 myASVar to getvariable myKMVar
 +  ​
 +  ​
   ​   ​
   ### SET ###   ### SET ###
   -- IF KM Variable does NOT exist, it will be created --   -- 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   setvariable myKMVar to myASVar
   ​   ​
Line 25: Line 52:
 ``` ```
  
-==== Example ​====+**Real-World ​Example**
  
 Normally, you would not have both a GET and a SET variable within the same AppleScript tell block.\\ Normally, you would not have both a GET and a SET variable within the same AppleScript tell block.\\
Line 31: Line 58:
  
 ```applescript ```applescript
 +### Requires Keyboard Maestro 7.1+ ###
 +
 --- GET REQUIRED KM VARIABLES --- --- GET REQUIRED KM VARIABLES ---
  
Line 48: Line 77:
 ``` ```
  
 +===== Local & Instance Variables =====
  
-**For more details, see [[manual:​Scripting|Scripting article in the Manual Section]].** 
  
-----+To get or set [[manual:​Variables#​Instance_Variables_v8|Local or Instance Variables]],​ you must pass the macro execution instance to the `getvariable` or `setvariable` command. ​ The instance is passed in to your script via the KMINSTANCE environment variable (v8.0.3+).
  
-===== Prior to Ver 7.1 =====+  * //Local Variables// are denoted by a Variable with the prefix of "​Local"​. 
 +  * //Instance Variables// are denoted by a Variable with the prefix of "​Instance"​.
  
-  * 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. +```applescript 
-  * They present an alternate method.+### Requires ​Keyboard Maestro ​8.0.3+ ###
  
-==== Create & Set Variable ​====+set kmInst to system attribute "​KMINSTANCE"​ 
 +tell application "​Keyboard Maestro Engine"​ 
 + set kmLocalVar1 to getvariable "​Local__SomeLocalVariable"​ instance kmInst 
 + setvariable "​Local__FromAS"​ instance kmInst to "Variable ​set in AppleScript."​ 
 +end tell
  
-```applescript +log kmLocalVar1 
---- Requires KM 7.0.2+ ---+```
  
---- Set AppleScript Variables to KM Variable Name and Value --- 
-set kmVarName to "My KM Var Name" 
-set kmVarValue to "My data" 
  
 +===== Dictionary Values =====
 +
 +You can read and write [[manual:​Dictionaries|Dictionary]] values from AppleScript.
 +
 +```applescript
 +### Requires Keyboard Maestro 8.0+ ###
  
 tell application "​Keyboard Maestro Engine"​ tell application "​Keyboard Maestro Engine"​
-  if variable kmVarName exists then + set kmDictList to name of dictionaries 
-    --- SET KM Variable --- + set dictKeyList ​to dictionary keys of dictionary "First Names" 
-    ​set value of variable kmVarName ​to kmVarValue + 
-  else + set value of dictionary key "​P"​ of dictionary "First Names" to "​Fred"​
-    --- Create & Set KM Variable --- +
-    make new variable with properties {name:​kmVarName, ​value:​kmVarValue} +
-  end if+
 end tell end tell
 ``` ```
  
-==== Get Existing ​Variable ====+===== 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)
  
 ```applescript ```applescript
---- Requires KM 7.0.2+ ---+my setKMVar("​MY_KM_Variable",​ "some new value"​)
  
---- Set AppleScript Variables to KM Variable ​Name and Value --- +on setKMVar(pKMVarNameStr,​ pValueStr) 
-set kmVarName ​to "My KM Var Name+   
-set kmVarValue ​to "​TBD" ​-- default value of KM variable, ​will be updated+  ​--- 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:​pKMVarNameStrvalue:​pValueStr} 
 +        set varCreatedBool to true 
 +         
 +      else 
 +        error ("​Error " & errNum & ": ​ " & errMsg) 
 +      end if 
 +      -- END on error 
 +       
 +    end try 
 +  end tell 
 +   
 +  return varCreatedBool 
 +   
 +end setKMVar 
 +```
  
-tell application ​"Keyboard Maestro Engine" + 
-  ​if variable kmVarName exists then +==== Get Variable ==== 
-    --- GET Existing KM Variable ​--- +(returns empty string ​""​ if Variable does //not// exist) 
-    set kmVarValue ​to value of variable ​kmVarName + 
-  else +```applescript 
-    --- KM Variable NOT Found --- + 
-    set kmVarValue ​to ""​ +set myKMVar to my getKMVar("​MY_KM_Variable"​) 
-    -- Optionally, throw an AppleScript ​error -- + 
-    ​error "​[ERROR] KM Variable '"​ & kmVarName & "'​ was NOT found."​ +on getKMVar(pKMVarNameStr) 
-  end if + 
-end tell+  ​--- 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.1483742947.txt.gz · Last modified: 2017/01/06 17:49 by JMichaelTX