I use TeamViewer to control the PC in the Hut, because it’s free, and it often works quite well. The thing that drives me most nuts about it is how to right-click remotely. I’m working from a Mac Book Pro with a trackpad. I suppose I could actually use a two button mouse, but I haven’t used a mouse with a MBP forever. I’m not even sure I have a two-button mouse… The solution is to go to the System Prefs Trackpad panel and set the Secondary Click checkbox for two-finger click.
That actually works great for TeamViewer remote sessions. But it drives me nuts in MacLand, because I seem to use two hands on the trackpad and am constantly getting unwanted context menus. So I wanted a handy way to turn on or off the two finger click trick programatically, which is to say, with AppleScript.
So how do you get your hooks into the Systems Preferences elements?
The key is to use System Events to get and set the window’s UI elements. Here’s a simple script that collects the UI elements for the frontmost window of the application you want to peek at, in this case System Preferences:
tell application "System Preferences" --bring System Prefs to front activate end tell tell application "System Events" tell process "System Preferences" set windowsProperties to entire contents of front window end tell end tell return windowsProperties
The results window displays a lengthy list of elements that you’ll have to noodle over to figure out what you want. In this case, I had opened System Preferences and clicked to open the Trackpad panel, as in the image at top. Here’s what the ScriptDebugger window looked like:
Here’s the pasted value (pasted into ScriptDebugger) from the results for “checkbox 2 of tab group 1 of window “Trackpad” of application process “System Preferences”:
tell application "System Events.app" tell application process "System Preferences" tell window "Trackpad" tell tab group 1 tell checkbox 2 -- your code goes here end tell end tell end tell end tell end tell
This nested tell set is clunky, but lets you easily understand exactly what’s going on, and you can just paste it into a script to get or set a value to a particular UI element. I had to horse around to check or un-check the secondary click checkbox. “Normal” checkboxes have a value of “0” for unchecked and “1” for checked. The script would let me get the value, “0” or “1”, but not let me set the value. However, it did let me treat the checkbox like a button, and “click” it. Go figure. That would be a problem if I really needed to set a particular value, but in this case, I’m happy to let it toggle:
--toggles "2 finger click" for secondary click on or off via trackpad pane of system Prefs --needs "does trackpad panel exist?" --JJ McClintock 20130411 tell application "System Preferences" activate end tell tell application "System Events" tell application process "System Preferences" tell window "System Preferences" tell scroll area 1 --hopefully this will catch issues if no trackpad panel exists try click button "Trackpad" tell application "System Events" tell application process "System Preferences" tell window "Trackpad" tell tab group 1 ----set value doesn't seem to work --set value of checkbox 2 to 1 ----get works fine --get value of checkbox 2 --click works as toggle click checkbox 2 end tell end tell end tell end tell end try end tell end tell end tell end tell --we want to quit System Prefs when we're done tell application "System Preferences" quit end tell
I saved the “toggle 2 finger secondary click” script as an application bundle and placed it in my script menu folder. Now I can turn on 2 finger click when I begin a TeamViewer session and turn it off the same way when I’m done.