AppleScript 快速入门

AppleScript 快速入门

AppleScript 顾名思义是苹果开发的一套脚本语言,利用 AppleScript 在 macOS 系统上可以对其他程序进行操作,点击按钮、发送消息、模拟自动化执行功能,比如可以打开浏览器,清空回收站等等一些操作,是一个非常有意思的脚本。说好了要快速入门,下面我们开始快速学习了解它吧。

一、让其他程序执行任务

在 macOS 上有一个应用叫脚本编辑器,通过 Launchpad 可以搜索到,打开脚本编辑器之后,可以看到支持编写和解析 AppleScript 和 JavaScript 两种脚本,如下图所示:

AppleScript 的语法和平时的英语语法很类似,你想让哪个程序执行操作,就 tell 它,比如你想让 Finder 清空回收站那就这样写:

tell application "Finder"
    empty the trash
end tell

在脚本编辑器上点击运行按钮就可以看到回收站的内容被清空了,或者按快捷键 Command + R 也能运行,运行之前记得回收站得有东西,不然可能会执行失败。

如果你想让系统说话,可以这样写:

tell application "Finder"
    say "My name is exchen"
end tell

哈哈,记得把电脑的声音打开,是不是听到说话了?不仅支持英文和中文,其他国家语言,像德语、荷兰语笔者试过,同样也可以。

如果你想让浏览器打开 URL,可以这样写:

set myBlog to "http://www.exchen.net"

# 告诉 Chrmoe 浏览器打开 URL
tell application "Google Chrome"
    # 新建一个 chrome 窗口
    set window1 to make new window
    tell window1
        set currTab to active tab of window1
        set URL of currTab to myBlog
    end tell
end tell

看看 Chrmoe 浏览器是不是打开了你指定的 URL 了?有意思吧?

上面的测试代码都是在脚本编辑器里运行的,如何脱离脚本编辑器,直接在系统上运行呢?我们可以保存或导出脚本,点击文件菜 -> 存储,可以看到支持的格式有四种,如图所示:

保存为脚本类型,然后通过 osascript 来执行脚本,如下:

/usr/bin/osascript test1.scpt

如果保存为应用程序类型,就是一个 .app 的包,直接双击打开就能运行。

二、数据类型

AppleScript 的数据类型比较简单,一般常用的有 number、string、list、record,也就是数字类型、字符串类型、列表类型、字典类型。

数字类型的赋值和使用如下:

set num1 to 10 # 给 num1 赋值
set num2 to 20 # 给 num2 赋值
set num3 to num1 + num2 # num1 + num2 赋值给 num3
set num4 to num3 * 2 # num3 * 2 赋值给 num4

字符串类型的赋值和使用如下:

set str1 to "exchen.net"
set str2 to "hehe"
set str3 to str1 & str2

字符串与数字的转换方法如下:

set str3Len to the length of str3
set numToStr to num1 as string
set strToNum to "123" as number

列表类型其实就是相当于数组,定义和操作列表类型的方法如下:

set myLists to {1, 2, "str", 4, 5} # 定义列表数据
set item 3 of myLists to "exchen" #操作第三列的数据
get myLists  # 获取列表数据

字典类型的定义和操作方法如下:

set myRecord to {name:"exchen", blog:"http://www.exchen.net", body:"hehe"} # 定义 Record 数据
set value to the body of myRecord # 从 Record 中获取 body 数据给 value
get value

三、条件语句

既然是脚本语言,当然不能少了 if 和 else 语句,使用方法如下:

set num to 123
if num = 123 then
    display dialog "等于 123"

else if strToNum > 456 then
    display dialog "大于 456"

else
    display dialog "不等于 123 也不大于 456"
end if

通过 contains 方法来进行字符串的比较判断:

set domainName to "www.exchen.net"
if domainName contains "exchen" then
    display dialog "包含 exchen"
else
    display dialog "不包含 exchen"
end if

四、循环

循环的写法有好几种,不过都是使用 repeat … end repeat,比如循环 100 次可以这样写:

set num to 10
repeat 100 times
    set num to num + 1
end repeat

get num

类似于 for 循环,就这样写:

set num to 5
repeat with counter from 0 to num by 1
    display dialog counter
end repeat

类似于 while 循环,可以这样写:

set num to 0
repeat until num ≥ 10
    display dialog num
    set num to num + 3
end repeat

五、函数

如果某些功能有重用性,应该要写成函数,AppleScript 也支持定义函数,定义和使用方法如下:

on testFun()
    set num to 1
end testFun

testFun()

函数当然会有返回值,通过 return 返回值:

on testFun()
    set num to 1
    return num
end testFun

set ret to testFun()
get ret

另外函数可能还会带参数,带参数的方法使用如下:

on testFun(str)
    display dialog str

end testFun

testFun("exchen")

函数有可能会带多个参数,使用方法如下:

on testFun(str1, str2)
    display dialog str1
    display dialog str2

end testFun

testFun("exchen", "hehe")

六、用户交互对话框

在前面我们使用过 display dialog 弹出对话框,如果要指定标题通过 with title 关键字,代码如下:

display dialog "这是内容" with title "这是标题"

指定按钮的内容,可以通过 buttons {"No", "Yes"},按钮个数最多三个,代码如下:

display dialog "这是内容" with title "这是标题" buttons {"No", "Yes"}

也可以通过 default button 设置默认选择的按钮,代码如下:

display dialog "这是内容" with title "这是标题" buttons {"No", "Yes"} default button "Yes"

还可以指定对话框的图标,icon 图标可以指定 note/stop/caution 类型,或者指向文件路径,代码如下:

display dialog "这是内容" with title "这是标题" buttons {"No", "Yes"} default button "Yes" with icon note

对话框一般是用于和用户进行交互,通过 button returned 可以获取用户点击了哪个按钮,然后进行相应用操作,代码如下:

display dialog "这是内容" with title "这是标题" buttons {"No", "Yes"} default button "Yes"
if button returned of result = "Yes" then

else if button returned of result = "No" then

end if

对话框中也可以带输入框,让用户进行输入内容,代码如下:

display dialog "请输入内容:" default answer ""

带输入框的对话框的效果如下图:

输入内容之后,通过 text returned 来获取输入框的内容:

display dialog "请输入内容:" default answer ""
if text returned of result = "exchen" then
    get "exchen.net"
end if

七、使用词典

在第一节我们知道了如何在其他程序中执行任务,比如让浏览器打开 URL、清空回收站,如果还想执行其他额外更多的功能怎么办?去哪儿查相应的方法名称?

可以通过词典来找相应的方法名称,将应用直接拖到 Dock 上的脚本编辑器图标,然后就会显示扩展的词典,在这里可以查看该应用支持的相应方法名称说明,比如 Chrome 的词典如下图所示:

有些应用没有功能扩展的词典,就会提示打开词典失败,如下图所示:

八、操作其他程序的界面

本小节我们来试一下操作其他程序来实现简单的自动化,打开计算器,使用 entire contents 显示出 UI 信息,代码如下:

tell application "System Events"
    tell process "Calculator"
        entire contents
    end tell
end tell

返回 UI 信息如下:

{window 1 of application process "Calculator" of application "System Events", group 1 of window 1 of application process "Calculator" of application "System Events", static text "0" of group 1 of window 1 of application process "Calculator" of application "System Events", group 2 of window 1 of application process "Calculator" of application "System Events", button 1 of group 2 of window 1 of application process "Calculator" of application "System Events", button 2 of group 2 of window 1 of application process "Calculator" of application "System Events", button 3 of group 2 of window 1 of application process "Calculator" of application "System Events", button 4 of group 2 of window 1 of application process "Calculator" of application "System Events", button 5 of group 2 of window 1 of application process "Calculator" of application "System Events", button 6 of group 2 of window 1 of application process "Calculator" of application "System Events", button 7 of group 2 of window 1 of application process "Calculator" of application "System Events", button 8 of group 2 of window 1 of application process "Calculator" of application "System Events", button 9 of group 2 of window 1 of application process "Calculator" of application "System Events", button 10 of group 2 of window 1 of application process "Calculator" of application "System Events", button 11 of group 2 of window 1 of application process "Calculator" of application "System Events", button 12 of group 2 of window 1 of application process "Calculator" of application "System Events", ......

column 2 of table 1 of menu item 1 of menu "帮助" of menu bar item "帮助" of menu bar 1 of application process "Calculator" of application "System Events", menu item "计算器帮助" of menu "帮助" of menu bar item "帮助" of menu bar 1 of application process "Calculator" of application "System Events"}

比如我们关心的是按钮 9,信息比较多,一时看不出我们所关心的按钮,可以通过 Xcode 自带的工具 Accessibility Inspector 查看 UI 信息,打开 Xcode 菜单,在 Open Developer Tool 里可以找到它,打开之后点击捕获按钮,找到我们关心的按钮,效果如下图所示:

在 Accessibility Inspector 界面往下拉,可以看到按钮 9 是在第二组的第四个,所图所示:

从返回的 UI 信息里可以找到按钮信息:

button 4 of group 2 of window 1 of application process "Calculator"

编写代码实现点击按钮:

tell application "System Events"
    tell process "Calculator"
        entire contents
        click button 7 of group 2 of window 1
    end tell
end tell

如果想点击菜单,在 UI 返回信息里你关心的菜单,编写代码如下:

tell application "System Events"
    tell process "Calculator"
        click menu item "关于计算器" of menu "计算器" of menu bar item "计算器" of menu bar 1
    end tell
end tell

执行之后,就相当于点击了 "关于计算器" 菜单,如下图所示:

九、运行参数

在第一节,我们知道通过 /usr/bin/osascript 能够执行脚本,如果脚本在启动的时候需要参数怎么办?通过 on run 定义好参数,代码如下:

on run {parameter1, parameter2}
    display dialog parameter1
end run

然后在命令行执行的时候,后面跟参数执行就行了,命令如下:

/usr/bin/osascript test1.scpt "exchen.net" "parameter2"

原文地址:http://www.exchen.net/applescript-快速入门.html

原文地址:http://blog.51cto.com/6095891/2160009

时间: 2024-10-18 14:51:37

AppleScript 快速入门的相关文章

笔记:Spring Cloud Zuul 快速入门

Spring Cloud Zuul 实现了路由规则与实例的维护问题,通过 Spring Cloud Eureka 进行整合,将自身注册为 Eureka 服务治理下的应用,同时从 Eureka 中获取了所有其他微服务的实例信息,这样的设计非常巧妙的将服务治理体系中维护的实例信息利用起来,使得维护服务实例的工作交给了服务治理框架自动完成,而对路由规则的维护,默认会将通过以服务名作为 ContextPath 的方式来创建路由映射,也可以做一些特别的配置,对于签名校验.登录校验等在微服务架构中的冗余问题

javaweb-html快速入门

本文主要是进行HTML简单介绍(详细的属性查帮助文档就行了,这里主要为快速入门,赶时间,在最短的时间中看明白一个html文件的代码(如果能称之为代码的话)详细的样式表,布局啥的有时间再研究吧) HTML 1.html的简介 1.1,html的全称:HyperText Mark-up Language ,超文本标记型语言,是网页的语言. 超文本:比文本更加强大(后面还会讲到XML,可扩展标记性语言) 标记:就是标签,html所有操作都是通过标签直接或间接的操作(把需要操作的数据通过标签封装起来)

crosswalk 快速入门,利用WebRTC(html)开始开发视频通话

crosswalk 快速入门,利用WebRTC(html)开始开发视频通话 安装Python 从http://www.python.org/downloads/ 下载安装程序 安装完后,再添加到环境变量. 安装Oracle JDK 下载页面: http://www.oracle.com/technetwork/java/javase/downloads/ 选择要下载的Java版本(推荐Java 7). 选择一个JDK下载并接受许可协议. 一旦下载,运行安装程序. 安装Ant Ant:下载http

bash编程快速入门

首先,我们简单的介绍一下bash,bash是GNU计划编写的Unixshell,它是许多Linux平台上的内定shell,它提供了用户与系统的很好的交互,对于系统运维人员,bash的地位是举足轻重的,bash编程能很快处理日常的任务 bash入门,一个最简单的bash例子 #vim hello.sh #!/bin/bash #This is the first example of the bash #echo "Hello world" 下面,我们就这个简单的bash 脚本来介绍一下

定时器(Quartz)快速入门

Quartz概述 Quartz中的触发器 Quartz中提供了两种触发器,分别是CronTrigger和SimpleTrigger. SimpleTrigger 每 隔若干毫秒来触发纳入进度的任务.因此,对于夏令时来说,根本不需要做任何特殊的处理来"保持进度".它只是简单地保持每隔若干毫秒来触发一次,无论你的 SimpleTrigger每隔10秒触发一次还是每隔15分钟触发一次,还是每隔24小时触发一次. CronTrigger 在特定"格林日历"时刻触发纳入进程的

vue.js--60分钟快速入门

Vue.js--60分钟快速入门 Vue.js是当下很火的一个JavaScript MVVM库,它是以数据驱动和组件化的思想构建的.相比于Angular.js,Vue.js提供了更加简洁.更易于理解的API,使得我们能够快速地上手并使用Vue.js. 本文摘自:http://www.cnblogs.com/keepfool/p/5619070.html 如果你之前已经习惯了用jQuery操作DOM,学习Vue.js时请先抛开手动操作DOM的思维,因为Vue.js是数据驱动的,你无需手动操作DOM

Netty5快速入门及实例视频教程(整合Spring)

Netty5快速入门及实例视频教程+源码(整合Spring) https://pan.baidu.com/s/1pL8qF0J 01.传统的Socket分析02.NIO的代码分析03.对于NIO的一些疑惑04.Netty服务端HelloWorld入门05.Netty服务端入门补充06.Netty客户端入门07.如何构建一个多线程NIO系统08.Netty源码分析一09.Netty源码分析二10.Netty5服务端入门案例11.Netty5客户端入门案例12.单客户端多连接程序13.Netty学习

一起学Google Daydream VR开发,快速入门开发基础教程一:Android端开发环境配置一

原文因涉及翻墙信息,被强制删除,此文为补发! 准备工作 进入Google Daydream开发者官网,开启准备工作,官网地址:https://vr.google.com/daydream/developers/ -------------------------------------------------------------------------------------------------------------------- Google Daydream开发者网址: https

程序员带你十天快速入门Python,玩转电脑软件开发(二)

关注今日头条-做全栈攻城狮,学代码也要读书,爱全栈,更爱生活.提供程序员技术及生活指导干货. 如果你真想学习,请评论学过的每篇文章,记录学习的痕迹. 请把所有教程文章中所提及的代码,最少敲写三遍,达到熟悉的效果. 声明:本次教程主要适用于已经习得一门编程语言的程序员.想要学习第二门语言.有梦想,立志做全栈攻城狮的你 如果是小白,也可以学习本教程.不过可能有些困难.如有问题在文章下方进行讨论.或者添加QQ群538742639.群马上就满了,名额不多. 上节课主要讲解了以下内容: 为什么学习Pyth