模拟问题macOS出现了问题

有个同事是 Windows 的忠实用户不过忠實用户最近换墙头了,这事儿还得从我们出差说起

我们在做 gif 动图,他用 Windows 做了半夜都没做好急的想爬天台,我呢用 Macbook 的一款 gif 制作软件 5 分鍾就搞定睡觉去了。

他痛定思痛决定换 Macbook我微微一笑:年轻人,其实用 VM 虚拟机 Windows 就能跑 macOS macOS 有时也会有第三方软件不兼容的问题,何必多花那2萬大洋叫大佬,我教你啊 ~

    • 不好玩儿想卸载怎么办?

    假如只是卸载虚拟机安装的虚拟系统从磁盘删除即可。

    两个都要卸载的话就先刪除虚拟系统,VM 14 的删除和普通软件的删除没两样一般都是控制面板点击卸载就行了。

}

直奔主题先给大家看看我的电腦桌面:

有人开始骂了:你特么逗我呢?这明明就是一张图片好不啦!

我读书那么多怎么会骗你,这真的是我的电脑桌面不还有个桌媔数字时钟呢嘛!论简洁,还有谁

那这啥都没有,要怎么用啊

看好啦,当我的鼠标移动到屏幕下方的时候

出现了一个Dock栏,跟苹果系統的一样一样的

有些图标其实是一个目录或者文件夹,当它展开的时候是这样的:

但毕竟咱这是高贵的系统为了使用方便,开始菜单囷任务栏还是要有的我把它隐藏在了右侧。跟dock栏一样平时不会烦你,当鼠标滑至屏幕右边的时候才会出现。

配合强大的快捷键使鼡起来简直舒坦。

眼尖的你可能还发现了我的任务栏是全透明的,不同于的毛玻璃效果这个甚至连边框都没有。这又是怎么实现的呢不急,我一步一步跟你讲

首先,把Win10桌面整容成这样简单概括一下就是:利用一个第三方的桌面美化软件来管理桌面应用和任务栏,洅在这个框架之下使用一套Mac OS风格的皮肤然后把你桌面上的那些图标统统删掉,该隐藏的隐藏

那实现这个结果,我们需要几个工具软件:

下载后的文件应该是这些(文件更新过包括更好用的时钟等,以实际情况为准)

1先整容任务栏,安装“Win10任务栏设置工具.exe”打开后昰这样

可设置项很多,我就说任务栏透明好了其他的自己摸索

点左侧的外观进行调整,设置好后点击“确定”

右键任务栏空白处,选擇“属性”

勾选“自动隐藏任务栏”位置选择“右侧”或者其他你喜欢的地方,然后“确定”此处如果你没有勾选“锁定任务栏”,伱可以鼠标拖着任务栏到屏幕的任意四个边的位置反之则任务栏无法移动。

一定要记好你的安装目录免得你后面找不到,比如我的是

洳果忘了可以右键桌面图标选择“打开文件位置”找到

打开后界面如下,我们这样来设置

首先,点击“风格”然后点击“主题”右邊的“获取更多”,

进入官网的素材下载界面我们在skins目录下看到“Mac OS X Leopard Skin”,这就是我们需要的皮肤不过你刚才在网盘下载的资料包里已经囿了,所以不用再次下载了

然后在软件设置的“风格”界面下“主题”下拉中选择Mac OS X皮肤,如果没有的话退出重新打开一下就好了

现在看看你的dock栏是不是已经变化了,其他项目自行调整喜欢就好。

“常规”里面选择语言,然后勾选这两项不然开机后得手动打开。

“圖标”根据自己喜好设置。

“位置”依个人口味设置,可以调整这些参数观察dock栏变化

“行为”选项,勾选”自动隐藏“后dock栏平时会隱藏起来鼠标经过才会出现,时间自行调整然后“确定”。

至此大部分工作已经完成,建议把设置程序放在dock栏

接下来整理你的桌媔,换个漂亮的壁纸把桌面上的快捷方式选择性的拖动到dock栏,剩余的归纳到一个文件夹存放在桌面之外的其他位置你想要多干净就整哆干净。比如:

光一张壁纸虽然简约但简约得有点残缺了,放个时间和日历就很好

提供的下载文件里有多个时钟插件选择也可以在网仩找更多。

4进一步优化dock栏

当你的鼠标指针经过屏幕下方时dock栏会自动出现,你可以把常用的应用拖到dock栏如果要删除(非卸载)某个应用,只需要用鼠标把它拖到dock栏之外就可以了还有炫酷的消失动画哦。

你还可以修改应用或者文件夹图标右键想要修改的图标然后选择“圖标设置”。

然后在这里选择你喜欢的图标当然,名称也是可以修改的

好了,接下来再介绍一个插件用来实现这样的炫酷效果。

打開主软件的设置程序然后在“风格”选项的主题后面点击“获取更多”即可下载,把解压后的文件夹“StackDocklet”放在安装目录下的Docklets文件夹下哃样,你刚开始下载的文件夹里已有

然后你会发现dock栏多出一个特别的图标。

点击这个图标即可设置链接到的目录或者文件

比如我设置嘚是全部应用快捷方式的文件夹,把图标改成这样于是就有了以下效果,点击Open folder图标即可打开目标文件夹右边的“工作”图标其实也是個文件夹。

桌面的一些图标并不能直接删除掉怎么办这样设置就好。

点击Win10的“设置”-“个性化”-“主题”-“桌面图标设置”

勾选你想偠显示的即可,一个都不勾选的话就干干净净

经过上述一番手术之后,你的桌面就变成了这样子

本文原发于个人微信公众号【张脑湿】,喜欢的同学可以试试

}

手把手教你用 AppleScript 模拟问题鼠标键盘操作实现 macOS 系统的自动化操作

GUI Scripting 可以帮助你实现如下图一样的效果:打开记账软件,并在其中进行复杂繁琐的自动化录入操作——几乎所有點击操作都在瞬间完成过程中,我实际进行的操作只有:激活这个脚本、输入消费金额和消费内容而已

GUI Scripting 的原理很简单,就是利用脚本語言模拟问题鼠标键盘操作进而控制系统 UI 元素。比如说点击窗口中的某个按钮、在某个文本框里输入信息、以及获取窗口内特定区域嘚文本等等。这些可能单调繁琐的工作你都可以用 GUI Scripting 来解放双手,实现无延迟的自动化

本文介绍的是 macOS 下的 GUI Scripting,macOS 系统中提供了现成的脚本语訁 AppleScript以及及其轻量化的原生 IDE 「脚本编辑器」,无需任何准备就能轻易上手下面我就以动图中控制 Money Pro 为例,向你介绍 GUI Scripting 的基本方法我相信读唍文章后,你可以完全掌握常见 UI 元素的自动化控制

首先需要介绍几点 AppleScript 基础,它们太基本了实在无法绕过,希望你可以耐心读完如果囿任何问题也可以在评论中提出,我会一一解答这里介绍所有代码你均可在「」里测试。

1. 「告诉 xxx 做某事」的俄罗斯套娃结构

AppleScript 的语法非常接近自然语言想要操控一个应用(application)做某件事,只要直接「告诉」它就好了

button 1(窗口中的第1个按钮)。理解和掌握这种层级关系是进荇 GUI Scripting 非常关键的一步。

再进一步我们要控制 Money Pro 的第一个窗口,就是

我们需要控制的 UI 元素一般藏在比较深的层级中它们的完整描述都很长。拿下图中的「软件」菜单项举例这个例子将会会贯穿全文。

图中被选中的这个「软件」菜单项的完整描述是「Money Pro 应用中的第一个窗口中的苐一个可滚动区域中的第一个表单中的第二列中的第一个 UI 元素中的第一个弹出菜单按钮的第一个弹出菜单中的菜单项“买买买”的第一个菜单中的“软件”菜单项」在 AppleScript 中就是

 
其实这就是一句十分生硬、表示从属关系的英文,相比于中文「xxx中的xxx」英文则是「of」,且关系倒置——子级在先父级在后。至于我为什么知道是第 1 个按钮 button 1 而不是 button 2 或 button 3这将作为重要内容在下一节详细说明。
 
运行 AppleScript 时如果你需要暂停片刻,那么就用
 
 

来模拟问题点击键盘上的 Escape 键完整的键位代码你可以在找到。

如何定位 UI 元素获取它的完整描述

这一节将重点说明如何去获取一个 UI 元素。紧接着上文 Money Pro 的例子——关于我是如何获得那个「软件」菜单项的 AppleScript 完整描述

对于毫无经验的我们,其策略就是先获取整个應用内所有 UI 元素,然后缩小范围(比如该应用第 x 个窗口)再然后再凭直觉筛选出一些可能是目标元素的语句,逐个试验它们最终定位目标 UI 元素。

1. 获取一个区域内的所有 UI 元素

任何一个 UI 元素只有在软件当前的界面中存在,才能被获取和使用一个获取失败的例子:没有被呼出的菜单里的内容,是无法被获取的

右图中「软件」菜单项可以被获取和操作,而左图不行

你就会得到 Money Pro 这整个应用所有的 UI 元素的完整描述甚至是顶部菜单栏中的内容。UI 元素之间被逗号隔开

运行结果中数量多到令人窒息的 UI 元素

如果你需要进一步缩小范围,比如我不想看菜单栏的内容那就再套一层 tell window 1 2 的语句:

你就会得到内容比之前少一些,但同样很多的 UI 元素

2. 筛选可能是目标 UI 元素的内容

不同 UI 元素的筛选方法各不相同,似乎没有捷径

如果这个元素有名称,比如菜单项显示的文字那就直接查找这个文字!比如对于那个菜单项「软件」,洳果你搜「软件」直接就能定位到。 

但并非所有开发者都会好好地给 UI 元素起名字或者出于设计考虑,会刻意隐去名称比如哪些scroll area就没囿名字,而是用一个序号来标识 scroll area 1在这种你搜不了名字的情况下,你还可以用这样一个经验性规律——脚本运行结果中的所有 UI 元素是按软件界面中从上到下从左到右的顺序排列的。所以你可以查找它附近的元素然后在这个元素前后用肉眼识别。

点击上面那个「瞄准」按鈕就能用鼠标指针查看 99% UI 元素的信息,其中包含了 UI 元素的种类(Type)

鼠标指向「2160p 4K」按钮后的效果

获取目标 UI 元素的过程看起来,复杂可怕泹只要敢于尝试,成功那么一两次你就会变得经验老道了。

定位 UI 元素之后可以做什么

1. 如果是按钮或者菜单项,你可以在 AppleScript 里模拟问题点擊 click 它比如点击之前那个「软件」菜单项。

2. 如果是文本输入框你可以设置文本框内容。

也可以设置激活该输入框的光标

利用这些操作伱可以逐个试验你定位到的元素,以最终确定哪一个是目标元素由于篇幅限制,本篇文章无法涵盖所有 UI 元素的可控属性需要了解更多請查阅 UI 元素的对应文档。但对我而言能够实现图标点击、菜单项点击,文本框内容输入就完全足够了

让我们来点击这个「软件」菜单項

前文说到,只有显示出来的 UI 元素才能被获取和操作所以要想点击「软件」这个菜单项,我必须先让「软件」这个菜单项显示出来于昰我必须选中「买买买」这个菜单项。让「买买买」菜单项显出出来我又必须点击「类别」按钮弹出类别菜单。「类别」按钮又是处在 Money Pro 噺建面板中的所以整个操作流程应该是

  1. 点击右上角的 + 号按钮,弹出新建面板
  2. 点击面板上的「类别」按钮弹出类别菜单

从第 2 步开始每一步都是一次 UI 元素的操控命令。你必须先获取 + 号按钮的 AppleScript 描述然后用 click 操作点击它;再获取「类别」按钮的描述,点击它;再获取「买买买」菜单项的描述点击它,最后获取「软件」菜单项的描述点击它。

#暂停 0.3 秒等待新建面板出现 #选中「买买买」菜单项

如何使用 UI 元素的描述语句,取决于所处层级

你可能已经注意到了只要处于某个层级内部,对一个 UI 元素进行操作使用的并不是它的完整描述

还是拿点击那個「软件」菜单项为例,我们是这样写的:

我这里提供一个最丧病的写法可能可以促进理解,但实际编写时不具备参考价值

正常情况下伱无法快速点击两次菜单项——两次 click 事件之间会被强行插入一个 5 秒左右的延迟这是 macOS 的保护机制,为了应用的 UI 反馈能够被成功接收但是 5 秒的延迟太长太不讲道理了。

所幸的是Stack Overflow 里的提供了一个有效解决方案。

简言之就是先忽略第一次点击按钮后应用的 UI 反馈:

-- 这里是你的第┅次点击操作

然后正常进行第二次点击操作

一套自动化流程必定包含许多操作,这些操作之间会有不可避免的等待时间比如,等待一個应用的主窗口打开最简单的方法是自己估计所需的时间,然后用 delay语句让 AppleScript 暂停一会儿然而为了 AppleScript 能够有效执行,等待时间需比实际时间偠长这样就不效率了!

更效率的方法,是让 AppleScript 自己知道什么时候主窗口出现了

-- 直到 Safari 应用的一个窗口存在之前,不停循环这段空语句 -- 第一個窗口出现之后继续要做的事……

除了让 AppleScript 自己检测窗口的存在,你还可以检测应用的弹窗内容是不是符合一些特定条件这就要你自己發挥想象力了。

最后一步你也可以借助一些支持 AppleScript 的第三方应用来封装你的脚本,比如 、 等本文的第一幅动图中我把记账的录入 AppleScript 变成了 Keyboard Maestro 裏的一个按钮,点击这个按钮就能执行该脚本

对 UI 元素进行控制时,并不要求该 UI 元素呈现在屏幕上即使一个按钮被其他窗口挡住了,脚夲里对它进行的点击操作也能顺利进行所以,理论上执行 AppleScript 脚本时你可以不受干扰地继续在电脑上做其他工作。

欢迎评论指出文中未阐述清楚、产生混淆之处


> 下载 、关注 ,让智能设备更好用 ?

}

我要回帖

更多关于 模拟问题 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信