每天要在 Skype 准时发送消息,有没有什么方法可以让设备自动去执行定时发布消息呢?
大概思路:
- 打开 Skype 指定用户的对话界面。
- 发送指定内容。
- 定时发送。
在微软的官网上查到一个关于 Skype URI API 的介绍。简单的看了一下,使用以下方法调用 Skype 打开指定用户的对话界面。代码如下:
skype:用户ID?chat
接下来要解决的是发送指定内容的问题。这里我打算使用 AppleScript + Shell 来实现这个功能。
大概思路:复制指定内容到剪切板,打开 Skype 指定用户对话框,粘贴,发送。在 Mac 中 pbcopy 命令负责将内容复制到剪切板。
echo "自定义内容" | pbcopy
不过在 AppleScript 需要调用 Terminal 来运行,将内容复制到剪切板后再关闭 Terminal。
tell application "Terminal"
do script "echo \"自定义内容\" | pbcopy"
do script "killall Terminal"
end tell
这里解释一下 \"
,因为在 AppleScript 中 do script 已经使用了"
,那么在引号里面使用引号需要使用转义字符。然后再打开指定用户的对话界面,使用 open 命令来打开链接,然后就会跳转到 Skype 应用程序内了。
do shell script "skype:用户ID?chat"
do shell script 和 do script 有些不同,do shell script 不需要调用 Terminal 即可运行,但是 do script 就需要调用 Terminal 后运行,这里就不过多细说了。最后再使用 keystroke 模拟键盘操作粘贴和回车键。这里需要调用 System Events,然后使用 keystroke "v" using command down
,模拟 Command + V 操作,最后使用 key code 36
模拟回车键操作。代码如下:
tell application "System Events"
delay 0.3
keystroke "v" using command down
delay 0.3
key code 36
end tell
这里解释一下 delay,需要设置延时,如果操作太快,界面还没跳转过来,就进行下面的操作,这样整个流程就会出现问题。
最后要解决定时发送的问题。可以做一个守护进程,设置好时间,然后用 launchctl 启用即可。
<key>StartCalendarInterval</key>
<dict>
<key>Minute</key>
<integer>分钟</integer>
<key>Hour</key>
<integer>小时</integer>
</dict>
这里有个地方需要注意一下,需要调用 AppleScript 输出程序的路径,如果单单调用 AppleScript 是无法直接使用的,需要把 AppleScript 输出为应用程序后再使用。完整代码 --> Github。