無需第三方 App篓跛,同樣可以把你的 iOS 設(shè)備變成 Mac「遙控器」

轉(zhuǎn)載自:無需第三方 App愧膀,同樣可以把你的 iOS 設(shè)備變成 Mac「遙控器」 - 少數(shù)派

一個月前JailbreakHum同學(xué)寫了一篇《把你的 iOS 設(shè)備變成控制 Mac 的「遙控器」》胰蝠。碰巧我當(dāng)時也想要寫一篇類似的文章,當(dāng)這標(biāo)題映入眼簾嘴办,我心里便是咯噔一下,腦海里閃過 N 個加粗大字:「該死买鸽,我想寫的東西居然被搶先了涧郊!」。

不過眼五,仔細(xì)一讀妆艘,發(fā)現(xiàn)雖然晚了一步,但自己的方法還是有可取之處的看幼,簡單來講批旺,我的方法和 JailbreakHum 那篇文章實現(xiàn)的效果相同,都利用了 AppleScript诵姜,但是我不需要用Hazel汽煮,事實上無需任何第三方應(yīng)用,就可以實現(xiàn)通過 iPhone 來控制 Mac棚唆。

原理

想要遙控 Mac暇赤,關(guān)鍵就在于 Mac 上要有一個能根據(jù)手機(jī)上的指令自動觸發(fā) AppleScript 的后臺程序。但是宵凌,我們有沒有必要為了遙控 Mac 特意買一些應(yīng)用(比如 Hazel)鞋囊,然后單純?yōu)榱诉b控 Mac 就讓這些應(yīng)用常駐后臺,這是對金錢和內(nèi)存的雙重浪費瞎惫。

所以在我看來溜腐,這個用來觸發(fā) AppleScript 的扳機(jī)應(yīng)該滿足兩個條件:

這是一個我們本來就一直放在后臺的應(yīng)用坯门;

這個應(yīng)用最好免費。

好消息是逗扒,確實有兩個應(yīng)用完全符合要求古戴,它們就是 Message 和 Mail 兩個原生應(yīng)用。大多數(shù)人都不知道 Message 和 Mail 都自帶了自動運行 AppleScript 功能矩肩,下面請讓我一一介紹现恼。

通過 Message 操控 Mac

Message 啟用自動觸發(fā) AppleScript 的方法是在應(yīng)用偏好設(shè)置中打開 「通用 - AppleScript 處理程序」菜單,從中選擇我們想要運行的 AppleScript黍檩。

令人意外的是叉袍,蘋果已經(jīng)為我們準(zhǔn)備好了幾個十分有用的 AppleScript,例如用來遙控 iTunes 的 iTunes Remote Control刽酱。而這些用來運行的 AppleScript 就儲存在/Users/用戶名/Library/Application Scripts/com.apple.iChat/中喳逛。

點開這些 AppleScript 文件,在文件最開頭的是蘋果的免責(zé)聲明棵里,后面就是腳本代碼了润文,代碼的注解非常詳細(xì),即使不熟悉 AppleScript 的人也能大概看懂(學(xué)習(xí) AppleScript 的好教材)。

這里以選擇 iTunes Remote Control 為例。先讓我們來看一下這個 AppleScript 的效果固额。

首先,確保我們 Mac 上所使用的 iMessage 帳號與我們手機(jī)上的帳號不同(你可以先試一試如果賬號一樣會發(fā)生什么)骏掀。

然后,我們只要從 iPhone 上向電腦上的 iMessage 帳號發(fā)送play柱告,iTunes 就會被自動打開并播放音樂截驮,不僅如此,你還會收到 iMessage 回復(fù)告訴現(xiàn)在正在播放的是什么际度。除了 play 以外葵袭,其它指令還包括:

pause: 暫停

status: 播放狀態(tài)

next: 下一首

previous: 上一首

mute: 靜音

unmute: 解除靜音

help: 顯示幫助

但是,這個 AppleScript 有兩個小的問題甲脏。

1. 我們 Mac 上的 iMessage 帳號與 iPhone 上的一般是一樣的眶熬,我們不可能為了遙控器的需求,去讓 Mac 使用一個不同的賬號 块请,但請看代碼的這里:

on getCurrentiTunesTrack()

set theCurrentTrackMessage to "Not playing."

由于反饋信息 (theResponse) 被默認(rèn)為 「Unknown Command.」娜氏,即一旦收的任何沒有預(yù)先設(shè)定過的命令,Apple Script 都會自動回復(fù) 「Unknown Command」, 而 「Unknown Command.」 本身也并非定義過的指令墩新!所以當(dāng)自己給自己發(fā)送信息后會發(fā)生什么贸弥,相信聰明如你應(yīng)該明白了吧。

2. 萬一你的基(姬)友也看到了這篇文章海渊,趁你在開會時給你發(fā)了 「unmute」「play」那又該怎么辦……绵疲?

所以哲鸳,我們希望能通過「自己給自己發(fā)短信」的形式來激活這個 AppleScript,而且確保只有自己的 iMessage 賬號才能遙控 Mac盔憨。

為了解決這些問題徙菠,我想先簡單介紹一下這個 AppleScript 的代碼。代碼主要由兩部分組成郁岩,第一部分類似一個「控制器」(message received)婿奔,會在收到手機(jī)發(fā)來的信息時將命令提取出來,之后通知第二部分(runiTunesRemoteControl)用提取出的命令對 Mac 上的 iTunes 進(jìn)行操作问慎。

操作結(jié)束后萍摊,第二部分會生成一個反饋信息,并將它發(fā)回「控制器」如叼,再由「控制器」將反饋信息發(fā)給手機(jī)冰木。

可以想象,如果「控制器」能在收到信息時檢查一下信息是否來自我們本人笼恰,再決定是否通知第二部分進(jìn)行操作踊沸,并且能在發(fā)送反饋信息給手機(jī)前,確保不會再將 「Unknown Command.」 發(fā)回挖腰,一切不就解決了嗎雕沿?

因此我們的改動將集中在「控制器」,也就是這段代碼上:

on message received theMessage from theBuddy for theChat

-- 將命令(theMessage)傳到第一部分猴仑,并將反饋信息存在 theResponse 中

set theResponse to runiTunesRemoteControl(theMessage)

-- 向手機(jī)發(fā)送 theResponse

send theResponse to theChat

end message received

改動后:

on message received theMessage from theBuddy for theChat

set serviceBuddy to name of service of theBuddy

-- 檢查發(fā)送者是否是我自己

if serviceBuddy = myiMessageAccount then

set theResponse to runiTunesRemoteControl(theMessage)

-- 確保反饋不是 「Unknown Command.」

if theResponse ≠ "Unknown command." then

send theResponse to theChat

end if

end if

end message received

這樣一來,問題就算是解決了肥哎,當(dāng)然你也可以在此基礎(chǔ)上加上其他你想要的功能辽俗,例如關(guān)閉屏幕等。這些改動需要在代碼的第二部分中完成篡诽,只需要在多加幾個 「if」 條件語句即可崖飘。

如果你有一定編程基礎(chǔ)的話,這個腳本還可以變得更加強(qiáng)大杈女,它可以把手機(jī)上發(fā)來的信息直接輸入 Mac 的 Termial朱浴,這樣一來我們手機(jī)上的 Message 應(yīng)用可以變成一個類似 shell 的存在,可以動態(tài)執(zhí)行手機(jī)上傳來的命令达椰。

也就是說翰蠢,我們的手機(jī)可以遙控 Mac 干任何事情,如果有讀者有興趣啰劲,我會在更新時貼上實現(xiàn)方法梁沧。

通過 Mail 操控 Mac

相較于使用 Message, Mail 的好處在于可以設(shè)定不同規(guī)則觸發(fā)不同的 AppleScript蝇裤,這樣我們就沒有必要把所有 AppleScript 寫在一個文件里或是寫一個需要調(diào)度其他 AppleScript 的 AppleScript廷支。

除此以外频鉴,還有一個好處就是如果你是 Android 手機(jī),可能無法使用 iMessage 給自己發(fā)信息恋拍,但是 Mail 卻是完全通用的垛孔。

Mail 的設(shè)置相較 Message 容易,因為我們可以通過 Mail 直接設(shè)定 AppleScript 的觸發(fā)條件施敢,而不是在 AppleScript 里用代碼來判斷似炎。這樣對于沒有編程基礎(chǔ)的人來說更為簡單。

這里以添加一個能關(guān)閉屏幕的 AppleScript 為例悯姊。

1. 先創(chuàng)建一條關(guān)閉屏幕的 AppleScript羡藐,在應(yīng)用程序中打開「腳本編輯器」,新建一個 AppleScript悯许,命令很簡單仆嗦,只要輸入一行do shell script "pmset displaysleepnow"即可,之后保存先壕。

2. 打開郵件應(yīng)用瘩扼,在偏好設(shè)置里點擊「規(guī)則 - 添加規(guī)則」;

3. 在這里我們就可以設(shè)定條件垃僚,我們把條件設(shè)置為 「主題包含 Turn off the screen」 且 「發(fā)件人等于 XX@XXX.com(你的郵箱)」集绰,并在「就執(zhí)行下列操作」中選擇「運行 AppleScript」,然后選擇運行我們事先寫好的可以關(guān)閉屏幕的腳本谆棺,在運行完后視情況刪除郵件栽燕。

與 Launch Center Pro & Workflow 整合

所謂沒有最懶只有更懶,通過LCPWorkflow改淑,我們在遙控時就不用重復(fù)輸入命令了碍岔。

首先介紹 Message 版的設(shè)置方法:

1. 在 Workflow 里建立動作,在 Text 塊中輸入命令朵夏,這里以 「Pause」 為例蔼啦,然后添加一個 Send Message 塊。

2. 點擊右上角的齒輪仰猖,選擇 「Share Workflow」捏肢,在第二行中選擇 「Add to Launch Center」 。

3. 然后在 LCP 中饥侵,建立一個 Remote Control 組鸵赫,把 Workflow 放入即可。

這樣一來爆捞,我們就能兩鍵暫停 Mac 上的音樂了(因為發(fā)送信息還要點一次)奉瘤。

對于 Mail 版,操作則可以徹底一鍵化,因為 Workflow 可以在應(yīng)用內(nèi)發(fā)送郵件盗温。我們可以這樣設(shè)置 Workflow:

同樣藕赞,與 LCP 整合后:

寫在最后

我原來還想介紹一下如何用Command-C來遙控,但是因為 macOS Sierra 的新特性——通用剪貼板卖局,Command-C 可以說已經(jīng)退出了歷史的舞臺斧蜕。

同時我也要感謝 JailbreakHum 的文章,結(jié)合他的文章砚偶,讀者們也許可以學(xué)到更多批销。

希望大家能在這篇文章里學(xué)到一些有用好玩的技巧。

參考文章:

《把你的 iOS 設(shè)備變成控制 Mac 的「遙控器」》

AutoForwardIMessage

Introduction to AppleScript Language Guide

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末染坯,一起剝皮案震驚了整個濱河市均芽,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌单鹿,老刑警劉巖掀宋,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異仲锄,居然都是意外死亡劲妙,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進(jìn)店門儒喊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來镣奋,“玉大人,你說我怎么就攤上這事怀愧∏染保” “怎么了?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵掸驱,是天一觀的道長肛搬。 經(jīng)常有香客問我,道長毕贼,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任蛤奢,我火速辦了婚禮鬼癣,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘啤贩。我一直安慰自己待秃,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布痹屹。 她就那樣靜靜地躺著章郁,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上暖庄,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天聊替,我揣著相機(jī)與錄音,去河邊找鬼培廓。 笑死惹悄,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的肩钠。 我是一名探鬼主播泣港,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼价匠!你這毒婦竟也來了当纱?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤踩窖,失蹤者是張志新(化名)和其女友劉穎坡氯,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體毙石,經(jīng)...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡廉沮,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了徐矩。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片滞时。...
    茶點故事閱讀 39,773評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖滤灯,靈堂內(nèi)的尸體忽然破棺而出坪稽,到底是詐尸還是另有隱情,我是刑警寧澤鳞骤,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布窒百,位于F島的核電站,受9級特大地震影響豫尽,放射性物質(zhì)發(fā)生泄漏篙梢。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一美旧、第九天 我趴在偏房一處隱蔽的房頂上張望渤滞。 院中可真熱鬧,春花似錦榴嗅、人聲如沸妄呕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽绪励。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間疏魏,已是汗流浹背停做。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留蠢护,地道東北人雅宾。 一個月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像葵硕,于是被迫代替她去往敵國和親眉抬。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,689評論 2 354

推薦閱讀更多精彩內(nèi)容