最近看过此主题的会员

查看: 1024|回复: 10

[代码发布] 【AppleScript】GUI Script 初探

[复制链接]

97

主题

1024

积分

134 小时

在线时间

版主

Rank: 7Rank: 7Rank: 7Rank: 7

举世无双百里挑一攻无不克先锋旗帜优秀新人

发表于 2019-1-15 02:22:34 | 显示全部楼层 |阅读模式
@Alex Alex 问我怎么实现设置手势而不弹出系统偏好窗口,但我的 AppleScript 水平仅限于改改别人的代码。不过好在有一些小的技巧,希望能帮到 Alex 和其他需要 GUI Script 的坛友。

首先分析一下我之前实现的点击“自动隐藏和显示菜单栏”而不弹出系统偏好面板的实现,这个脚本参考了一些资料,其中最重要的是Keyboard Maestro 坛友 ccstone 的代码和少数派的一篇关于 macOS 自动化的文章:手把手教你用 AppleScript 模拟鼠标键盘操作,实现 macOS 系统的自动化操作
[AppleScript] 纯文本查看 复制代码
-- 系统偏好设置
tell application "System Preferences" to reveal the ¬
-- 锚点
	anchor named "main" of ¬
-- 通用面板
	pane id "com.apple.preference.general"

-- 系统事件
tell application "System Events" to tell ¬
-- 系统偏好
	process "System Preferences" to tell ¬
-- 系统偏好 - 通用
	window "通用" to tell ¬
-- 点击“自动隐藏和显示菜单栏”
	checkbox "自动隐藏和显示菜单栏" to ¬
	perform action "AXPress"

-- 退出系统偏好
quit application "System Preferences"

suliveevil.github.io
www.better365.club/?fromuid=18
https://github.com/suliveevil/BetterAndBetter

97

主题

1024

积分

134 小时

在线时间

版主

Rank: 7Rank: 7Rank: 7Rank: 7

举世无双百里挑一攻无不克先锋旗帜优秀新人

 楼主| 发表于 2019-1-15 02:25:50 | 显示全部楼层
System Events 是 GUI Scripting 的最底层框架,再往上是 app,然后是 app 的窗口,然后是 app 窗口中的按钮,最后就是模拟键鼠操作
suliveevil.github.io
www.better365.club/?fromuid=18
https://github.com/suliveevil/BetterAndBetter
回复

使用道具 举报

97

主题

1024

积分

134 小时

在线时间

版主

Rank: 7Rank: 7Rank: 7Rank: 7

举世无双百里挑一攻无不克先锋旗帜优秀新人

 楼主| 发表于 2019-1-15 02:28:03 | 显示全部楼层
本帖最后由 无限可能 于 2019-1-15 02:31 编辑

UI 元素 是 GUI Scripting 的关键
可以通过

[AppleScript] 纯文本查看 复制代码
tell application "System Events"
    tell process "app name" -- 告诉 app
        entire contents -- 获取所有 UI 元素
    end tell
end tell


获得 app 所有可用于操作的 UI 元素。
suliveevil.github.io
www.better365.club/?fromuid=18
https://github.com/suliveevil/BetterAndBetter
回复

使用道具 举报

97

主题

1024

积分

134 小时

在线时间

版主

Rank: 7Rank: 7Rank: 7Rank: 7

举世无双百里挑一攻无不克先锋旗帜优秀新人

 楼主| 发表于 2019-1-15 02:47:51 | 显示全部楼层
本帖最后由 无限可能 于 2019-1-15 10:38 编辑

但是对于系统偏好设置这个app而言,它没有“contents”,而是以 pane 和 anchor 的形式存在。
[AppleScript] 纯文本查看 复制代码
tell application "System Preferences"
-- 列出所有 pane 的 ID set paneList to id of every pane
-- 列出所有系统偏好设置app内的 anchor。
-- set anchorList to name of anchors of pane id "com.apple.preference"
-- 列出系统偏好设置app里的 trackpad pane(面板)的 anchcor。
-- set anchorList to name of anchors of pane id "com.apple.preference.trackpad"
end tell

我这里有32个 pane (面板,系统本身有30个 pane ),也就是你打开系统偏好设置app后看到的那32(系统自带30)个 图标,每一个图标就是一个 pane 。
如果你安装(官网安装包安装,非Homebrew安装)过 MySQL、Flash 或者 Jitouch,你就知道 pane 是什么了。






suliveevil.github.io
www.better365.club/?fromuid=18
https://github.com/suliveevil/BetterAndBetter
回复

使用道具 举报

97

主题

1024

积分

134 小时

在线时间

版主

Rank: 7Rank: 7Rank: 7Rank: 7

举世无双百里挑一攻无不克先锋旗帜优秀新人

 楼主| 发表于 2019-1-15 02:59:07 | 显示全部楼层
论坛的编辑器不灵光了,明天换个chrome再写,太困了实在顶不住了。
suliveevil.github.io
www.better365.club/?fromuid=18
https://github.com/suliveevil/BetterAndBetter
回复

使用道具 举报

97

主题

1024

积分

134 小时

在线时间

版主

Rank: 7Rank: 7Rank: 7Rank: 7

举世无双百里挑一攻无不克先锋旗帜优秀新人

 楼主| 发表于 2019-1-15 03:06:42 | 显示全部楼层
最重要的说完了,明天再补充。
suliveevil.github.io
www.better365.club/?fromuid=18
https://github.com/suliveevil/BetterAndBetter
回复

使用道具 举报

16

主题

126

积分

19 小时

在线时间

实习版主

Rank: 7Rank: 7Rank: 7Rank: 7

举世无双先锋旗帜优秀新人

发表于 2019-1-15 10:18:31 | 显示全部楼层
厉害 强烈顶你
www.better365.club
回复

使用道具 举报

97

主题

1024

积分

134 小时

在线时间

版主

Rank: 7Rank: 7Rank: 7Rank: 7

举世无双百里挑一攻无不克先锋旗帜优秀新人

 楼主| 发表于 2019-1-15 10:40:47 | 显示全部楼层
本帖最后由 无限可能 于 2019-1-15 10:43 编辑




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
suliveevil.github.io
www.better365.club/?fromuid=18
https://github.com/suliveevil/BetterAndBetter
回复

使用道具 举报

97

主题

1024

积分

134 小时

在线时间

版主

Rank: 7Rank: 7Rank: 7Rank: 7

举世无双百里挑一攻无不克先锋旗帜优秀新人

 楼主| 发表于 2019-1-15 11:33:39 | 显示全部楼层
anchor 定位不到触控板的设置,那就换一种方法。
利用系统自带的 Accessibility Inspector 查看 app 的 GUI 元素信息。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
suliveevil.github.io
www.better365.club/?fromuid=18
https://github.com/suliveevil/BetterAndBetter
回复

使用道具 举报

0

主题

671

积分

230 小时

在线时间

版主

Rank: 7Rank: 7Rank: 7Rank: 7

优秀版主

发表于 2019-1-18 23:08:00 | 显示全部楼层
我本来想app通过AppleScript来调整手势的设定,但一定会激活系统偏好设置,只能放弃,还没有找到好的办法
www.better365.club
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表