リモート操作ソフト「TeamViewer」の画面から、ユーザーIDとパスワードを取得するAppleScriptです。
▲TeamViewer v14をmacOS 10.12(左)、10.14(右)で起動したところ
GUI Scriptingの機能を使って、画面上から情報を取得し、正規表現で抽出してみました。
TeamViewerで実家のMacなど、離れた場所にあるマシンをメンテナンスする必要がある場合に、実家から電話がかかってきて、TeamViewerのパスワードとIDを口頭で教えてもらって接続する必要があるわけですが、親が高齢のためそれが心もとなくなりつつある昨今、確実に確認するために作成したものです。
その場で、(自分のために)「TeamViewerを起動してIDとパスを確認して自分あてにメールで送ってくるAppleScript」を作りかけたのですが、途中からビデオ編集の仕方を教えろなどと言われて説明する羽目に。
AppleScript名:TeamViewerの「リモートコントロール」画面からIDとパスワードを取得(v14対応) 【コメント】 ? |
— Created 2019-07-15 by Takaaki Naganoya — 2019 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" property NSArray : a reference to current application’s NSArray property NSPredicate : a reference to current application’s NSPredicate property NSMutableArray : a reference to current application’s NSMutableArray set aRes to getIDAndPassFromTeamViewer() of me –> {myID:"XXX XXX XXX", myPass:"xxXxXX"} –TeamViewerの「リモートコントロール」画面からIDとパスワードを取得(v14対応) on getIDAndPassFromTeamViewer() –画面の表示状態を変更 selectRemoteControlRowOnTV("リモートコントロール") of me –画面(Window)上のテキストをとりあえず全部取得 set sList to retEveryStaticTextInCurrentView() of me set anArray to NSArray’s arrayWithArray:sList –「使用中のID」を取得 set aPred to NSPredicate’s predicateWithFormat:"SELF MATCHES ’[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}’" set bRes to (anArray’s filteredArrayUsingPredicate:aPred) as list set idRes to contents of first item of bRes –> "XXX XXX XXX" set bList to removeItemFromList(sList, idRes) of me set bArray to NSArray’s arrayWithArray:bList set bPred to NSPredicate’s predicateWithFormat:"SELF MATCHES ’^[0-9a-zA-Z]+$’" set cRes to (bArray’s filteredArrayUsingPredicate:bPred) as list set psRes to contents of first item of cRes –> "xxXxXX" return {myID:idRes, myPass:psRes} end getIDAndPassFromTeamViewer on retEveryStaticTextInCurrentView() activate application "TeamViewer" tell application "System Events" tell process "TeamViewer" tell window 1 tell group 2 set sList to value of every static text –> {"接続準備完了(安全な接続)", "パートナーID", "リモートコンピュータの操作", "遠隔操作を受ける許可", "使用中のID", "999 999 999", "パスワード", "xxx999", "無人アクセス"} return sList end tell end tell end tell end tell end retEveryStaticTextInCurrentView –TeamViewerで「リモートコントロール」行を選択 on selectRemoteControlRowOnTV(aTargStr) activate application "TeamViewer" tell application "System Events" tell process "TeamViewer" tell table 1 of scroll area 1 of window 1 set rCount to count every row repeat with i from 1 to rCount tell row i tell UI element 1 set aText to value of static text 1 end tell if aText = aTargStr then set selected to true end if end tell end repeat end tell end tell end tell end selectRemoteControlRowOnTV –1次元配列から指定の内容の要素をすべて削除して返す on removeItemFromList(aTargList, aTargValue) set anArray to NSMutableArray’s arrayWithArray:aTargList repeat set aInd to anArray’s indexOfObject:aTargValue if aInd = current application’s NSNotFound or (aInd as real > 9.99999999E+8) then exit repeat anArray’s removeObjectAtIndex:aInd end repeat return anArray as list end removeItemFromList |