Running applescript while screen saver is activated - applescript

I wanted to play a iTunes folder playlist at certain time, I figured out this part myself.
But the thing is, I wanted to switch iTunes to mini player afterwards. So here's the code
tell application "iTunes" to quit
delay 5
tell application "iTunes"
reopen
activate
set song repeat to all
set shuffle enabled to true
set sound volume to 35
delay 5
get name of AirPlay devices
set selected of AirPlay device "Airport Express" to true
play playlist "mom's music"
end tell
delay 20
-- here comes the part I don't get
tell application "System Events"
tell process "iTunes"
set frontmost to true
if title of window 1 is "미니 플레이어" then
click menu item 9 of menu 9 of menu bar 1
delay 5
click menu item 9 of menu 9 of menu bar 1
else
click menu item 9 of menu 9 of menu bar 1
end if
end tell
end tell
never mind the upper parts. Please take a look the part with "System Events".
It does work just as expected when screen saver is NOT running, but it doesn't when screen saver is running, but I can't figure out what I missed.
So, is there another limitation running applescript under screen saver I'm not aware of? Any suggestions would be appreciated. Thanks.
2017-09-17 add
I came to notice when I press "Window" menu item, iTunes (the main one) window disappears. Would that mean I have to be beyond screen saver to do anything with windows through applescript?

It appears that when the screen saver is running, the script will still run but not process certain events. The workaround is to stop the screen saver before running any code that depends on UI Scripting, in this case.
Example:
tell application "System Events"
key code 53 -- # Esc key.
delay 1 - # Adjust as necessary, the screen saver needs to have stopped before continuing.
tell process "iTunes"
set frontmost to true
if title of window 1 is "미니 플레이어" then
click menu item 9 of menu 9 of menu bar 1
delay 5
click menu item 9 of menu 9 of menu bar 1
else
click menu item 9 of menu 9 of menu bar 1
end if
end tell
end tell

Try this version
try
tell application id "com.apple.ScreenSaver.Engine" to quit
end try
tell application "System Events"
tell process "iTunes"
set frontmost to true
if title of window 1 is "미니 플레이어" then
click menu item 9 of menu 9 of menu bar 1
delay 5
click menu item 9 of menu 9 of menu bar 1
else
click menu item 9 of menu 9 of menu bar 1
end if
end tell
end tell

Related

Applescript Click item in system menu bar after opening it

I can open the bluetooth dropdown menu item with this code but I don't know how to actually click on any of the items in the menu.
tell application "System Events" to tell process "ControlCenter"
click menu bar item "Bluetooth" of menu bar 1
end tell
What would be a command to click on something in the open bluetooth menu?
This following AppleScript code should accomplish what you are trying to achieve. Just replace the "Mac Pro" part of the code with the name of the item you want to click.
tell application "System Events" to tell process "ControlCenter"
click menu bar item "Bluetooth" of menu bar 1
repeat until exists of checkbox 1 of scroll area 1 of window 1
delay 0.1
end repeat
click checkbox "Mac Pro" of scroll area 1 of window 1
key code 53 -- Press escape key
end tell
This following AppleScript code will return the names of the checkboxes so you can easily know your options to use in the first code.
tell application "System Events" to tell process "ControlCenter"
click menu bar item "Bluetooth" of menu bar 1
repeat until exists of checkbox 1 of scroll area 1 of window 1
delay 0.1
end repeat
set checkBoxNames to name of checkboxes of scroll area 1 of window 1
end tell

UI automation, appleScript Keyboard shortcuts for non-menued items Preview?

I am trying to create a keyboard shortcut action for Preview, namely Draw and Sketch. However, they are are the NON-menued items, which means can't get it done in System Preference I see someone done it from inspiration, it is possible, but when I try to follow alone, here is my code so far and please help me complete this. here are the action.
Here is the error I am facing now
after some researches, does the UI/accessibility inspector help?
activate application "Preview"
delay 0.4
set the menuItem to "Draw"
tell application "System Events"
try
tell application process "Preview" to click radio button menuItem of radio group 1 of splitter group 1 of window 1
on error
try
tell application process "Preview" to click radio button menuItem of radio group 1 of window 1
on error errorM
display dialog errorM
end try
end try
end tell
ideally, trying to make it to work when all bars are hidden,
but if not possible. can we make it to work vwith mark up bar is shown. as below.
This work for me using the latest version of macOS Mojave
tell application "Preview" to activate
repeat while application "Preview" is not running
delay 0.2
end repeat
tell application "System Events"
try
click menu item "Show Markup Toolbar" of menu 1 of menu bar item "View" of menu bar 1 of application process "Preview"
end try
delay 0.5
try
click menu item "Show Toolbar" of menu 1 of menu bar item "View" of menu bar 1 of application process "Preview"
end try
delay 0.5
repeat while not (exists of toolbar 1 of window 1 of application process "Preview")
delay 0.2
end repeat
set description2 to a reference to every checkbox of toolbar 1 of window 1 of application process "Preview"
set theCheckboxes to description of description2
if item 1 of theCheckboxes is "Draw" then
set checkBoxDraw to 1
else
set checkBoxDraw to 2
end if
if item 1 of theCheckboxes is "Sketch" then
set checkBoxSketch to 1
else
set checkBoxSketch to 2
end if
delay 1
-- Below, insert either checkBoxSketch for "Sketch" or checkBoxDraw for "Draw"
click checkbox checkBoxDraw of toolbar 1 of window 1 of application process "Preview"
end tell
-- without these next following lines, the toolbar "Draw" or "Sketch" do not appear to be selected
tell application "Preview" to tell window 1
set visible to false
set visible to true
end tell
delay 3

Using AppleScript to navigate menu bar item

I have made an AppleScript to interact with a menu bar item (NordVPN). Basically, it clicks the item, selects connect or disconnect, and that's it.
In developing this, I followed some advice in a response found here
It worked a couple of times, but now it just hangs and keeps "Running". Nothing is happening. I am wondering if the ignore responses is an issue? This was done to prevent a 5 second delay between clicks. Or could the two tries cause issue? I'm trying to ensure the script runs, whether there's "Connect" or "Disconnect".
Any advice is helpful. If someone has a suggestion for a better way to do this, I'll appreciate it. Thanks
Here's the code:
ignoring application responses
tell application "System Events" to tell process "NordVPN IKE"
click menu bar item 1 of menu bar 2
end tell
end ignoring
do shell script "killall System\\ Events"
delay 0.1
tell application "System Events" to tell process "NordVPN IKE"
tell menu bar item 1 of menu bar 2
try
click menu item "Connect" of menu 1
end try
try
click menu item "Disconnect" of menu 1
end try
end tell
end tell
EDIT: And now it's working again. It seems to work some of the time... But I cannot figure out why it stops working other times.
EDIT 2: It appears the issue arises when the Mac goes to sleep. When I wake it back up and try to run the script, it hangs. But if I manually click the menu bar item and then run the script, it'll work.
This works for me using the latest version of macOS high Sierra. Maybe this code will work a little better for you.
set disconnectExists to false
set connectExists to false
ignoring application responses
tell application "System Events"
launch application "NordVPN IKE"
delay 1
click menu bar item 1 of menu bar 2 of application process "NordVPN IKE"
end tell
end ignoring
do shell script "killall System\\ Events"
tell application "System Events"
repeat until disconnectExists or connectExists is true
set disconnectExists to menu item "Disconnect" of menu 1 of menu bar item 1 of menu bar 2 ¬
of application process "NordVPN IKE" exists
set connectExists to menu item "Connect" of menu 1 of menu bar item 1 of menu bar 2 ¬
of application process "NordVPN IKE" exists
end repeat
try
if connectExists is true then
delay 0.2
click menu item "Connect" of menu 1 of menu bar item 1 of menu bar 2 of ¬
application process "NordVPN IKE"
else if disconnectExists is true then
delay 0.2
click menu item "Disconnect" of menu 1 of menu bar item 1 of menu bar 2 of ¬
application process "NordVPN IKE"
end if
end try
end tell

How to download a new voice for say's function with AppleScript?

I'm searching a method to install different voices (2 to be exact) on the system preferences.
The voices are "Alex" for an english voice and "Thomas" for a french voice.
I've tried directly by console but didn't succeed, that's why I've turned to the AppleScript language, but I never used this language.
The code I've for the moment is
set osver to system version of (system info)
if osver is equal to "10.6.8" then
display dialog ("Downloading voices is only available in OS X Lion and higher")
else
tell application "System Preferences"
activate
reveal (pane id "com.apple.preference.speech")
end tell
try
tell application "System Events"
click radio button 2 of tab group 1 of window 1 of process "System Preferences"
repeat until (exists pop up button of tab group 1 of window 1 of process "System Preferences")
delay 2
end repeat
delay 2
click pop up button 1 of tab group 1 of window 1 of process "System Preferences"
delay 2
click menu item -1 of menu 1 of pop up button of tab group 1 of window 1 of process "System Preferences"
delay 2
end tell
on error
display dialog ("An error happend")
end try
end if
This program is opening the voice window but the display dialog appears every time whatever the index I put.
If you have another idea to download the voices, or if you can help me to understand what is not working, I will be grateful.
This worked for me in 10.9:
tell application "System Preferences"
reveal anchor "TTS" of pane id "com.apple.preference.speech"
activate
end tell
tell application "System Events" to tell window 1 of process "System Preferences"
tell pop up button 1 of tab group 1
click
click menu item "Customize..." of menu 1
end tell
delay 1
repeat with r in UI element 1 of rows of table 1 of scroll area 1 of sheet 1
if exists static text 1 of r then
if {"Alex", "Thomas"} contains value of static text 1 of r then
if value of checkbox 1 of r is 0 then click checkbox 1 of r
end if
end if
end repeat
click button "OK" of sheet 1
end tell
It took multiple seconds to run the script though.

Clicking an applications menu bar item with AppleScript

I use Time Tracker For Mac as my, well, time tracker. It has a menu bar item which I want to be able to access via keyboard shortcut.
I found a way to click the item with GUI scripting:
tell application "System Events" to tell process "Time Tracker"
click menu bar item of menu bar 2
end tell
Unfortunately the script does not return success unless I acted on the menu (i.e. pressing Enter or Esc key). So if I want to trigger the down arrow key...
tell application "System Events" to tell process "Time Tracker"
click menu bar item of menu bar 2
-- hangs here forever until menu is closed
tell application "System Events" to key code 124
end tell
the script just waits forever. If I hit escape the menu bar item closes and only then the down arrow key will be triggered.
It's kind weird. I just need the menu bar item's click to not block further script execution.
Any suggestions?
The click command returns after about 5 seconds for me. One workaround is to use ignoring application responses and terminate System Events:
ignoring application responses
tell application "System Events" to tell process "Time Tracker"
click menu bar item 1 of menu bar 2
end tell
end ignoring
do shell script "killall System\\ Events"
delay 0.1
tell application "System Events" to tell process "Time Tracker"
tell menu bar item 1 of menu bar 2
click menu item 2 of menu 1
end tell
end tell
Related questions:
Applescript: on clicking Menu Bar item via gui script
Is AppleScript UI Scripting very slow in general, or is it my script, or something else?
Actually, the key code for the down arrow seems to be 125. Try this:
tell application "System Events" to tell process "Time Tracker"
click menu bar item of menu bar 2
key code 125
key code 36
end tell
There is a short delay (a couple of seconds) after the click menu bar... command, I don't know why.

Resources