Apple scriptでZoomミーティングに自動参加する - ZoomのGUI構成 -

# Main window
Zoomが起動した時に出てくるあの画面のこと。
![スクリーンショット 2023-05-24 14.40.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2432559/3e0496a5-87a8-d584-34bf-92b978f364a8.png)


```
・menu bar 1 → 上部メニュー
    ├・menu bar item "apple"   　→ 左上の🍎マーク
    ├・menu bar item "zoom.us" 　→ その隣，zoom.us
    ├・menu bar item "編集"     　→ 〃
    ├・menu bar item "ウィンドウ"  → 〃
    └・menu bar item "ヘルプ"     → 〃

・menu bar 2 → 上部メニュー右のZoomロゴ
    └・{} → 空配列 (クリック時に中身が変わりそう)

・UI element 3
    ├・button 1 → 新規ミーティングボタン
    ├・button 2 → 参加ボタン
    ├・button 3 → スケジュールボタン
    ├・button 4 → 画面共有ボタン
    └・button 5 → 設定ボタン
```

# MTG window [Host]
会議中の画面のこと。
![スクリーンショット 2023-05-24 14.55.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2432559/7335f375-5020-296e-797a-7cd03983369a.png)

#### ※ 画面幅によってbuttonの番号は変動する

```
・window "Zoom ミーティング" : 下部メニュー表示時
    ├・button 1 → 音声ミュートボタン
    ├・button 2 → 音声ミュートボタン右上 ^
    ├・button 3 → ビデオミュートボタン
    ├・button 4 → ビデオミュートボタン右上 ^
    ├・button 5 → > ミーティング終了ボタン
    ├・button 6 ~ (max:20) → ビデオミュートボタンの隣，連番
    ├・button 21 or less → 画面左上 セキュリティマーク
    ├・button 22 or less → 画面右上 表示ボタン 
    ├・button 23 or less → ウィンドウの閉じるボタン
    ├・button 24 or less → ウィンドウの最大化ボタン
    ├・button 25 or less → ウィンドウの最小化ボタン
    └・tab group 1
    　├・image 1
    　├・image 2
    　└・static text "{name}" → Zoom参加者の名前
```

```
・window "Zoom ミーティング" : 下部メニュー非表示時
    ├・button 1 → ウィンドウの閉じるボタン
    ├・button 2 → ウィンドウの最大化ボタン
    ├・button 3 → ウィンドウの最小化ボタン
    ├・static text "Zoom ミーティング"
    └・tab group 1
    　├・image 1
    　├・image 2
    　└・static text "{name}" → Zoom参加者の名前
```

# MTG window [Guest]
会議に参加している側の画面のこと。
全てHostと同じ。
button 1 ~ 4は下部バーに常時表示されている音声/ビデオミュートボタン，button5はミーティング終了ボタンになっており，その後は左側から連番が振られ，セキュリティマークと表示ボタンがあり，ウィンドウの閉じるボタンなどが並ぶ。

## Apple scriptからMTG中の画面を操作する際の注意事項
- Guest側はMTG windowを選択中と非アクティブ時でウィンドウタイトルが変わることがあるため，`tell window "Zoom ミーティング"`をする時に気を付ける  

- Guest側のMTG window非アクティブのタイトルは"Zoom ミーティング   40分"等と表示されるが，この"ミーティング"と"40分"の間の空白は半角スペース3つ分だったりする

- 音声/ビデオミュート，ミーティング退出以外のボタンは画面幅によって番号が変わる可能性がある

- ↓ 設定から画面下部メニューの常時表示を推奨
![スクリーンショット 2023-05-24 16.16.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2432559/22f4dec4-2f70-5474-0e80-ec67bf200f0d.png)

## 結局Apple scriptからZoomに参加するだけならブラウザ経由が楽
一応，以下のスクリプトのようにzoom.usを起こしてショートカットキー入力によってミーティングに参加したり，上記のボタン番号を使って`click button 2`のようにミーティングに参加したりすることはできるが，自分の環境では同じコードでもうまく動いてくれる時とうまく動いてくれない時があった。
```applescript
on joinMeeting()
	tell application "System Events"
		key code {55, 38}
		delay 2
		keystroke "{ROOM_ID}"
		delay 0.5
		key code 76
		delay 2
		keystroke "{PASSCODE}"
		delay 0.5
		key code 76
	end tell
end joinMeeting

tell application "zoom.us"
	activate
	tell application "System Events"
		tell process "zoom.us"
			delay 5
            my joinMeeting()
		end tell
	end tell
end tell
```

そのため，Apple scriptを用いてZoomミーティングに自動参加するのであれば[こちら](https://qiita.com/hirqo/items/03288818ca051d65dd64)の方のようにブラウザ経由で参加する方が楽であった。

ただ，上記のUI構成により，以下のように自動でチャットを送る機能などを組める。
```applescript
tell application "zoom.us"
	tell application "System Events"
		tell process "zoom.us"
			tell window 0
				click button 9
				delay 0.5
				keystroke "Test"
                key code 76
			end tell
		end tell
	end tell
end tell
```

あとはmacOS標準搭載のAutomatorを用いて，ミーティング参加用スクリプトとチャット送信用スクリプトを制御してやればPCに触れることなくZoomミーティングに参加することができる。

# 参考文献
https://qiita.com/hirqo/items/03288818ca051d65dd64