環境による条件分岐をKeyboard Maestroで行う
複数のMacを使っている場合、異なる場所で仕事する場合などに環境による条件分岐を行う方法について考えてみました。
この記事内の目次
ユースケース
私の場合、メインのMacBook Pro 2021はDELLの5K2Kモニターにつないでいます。その他は4Kモニターです。横幅が異なるため、ウィンドウサイズの変更やIllustratorのワークスペースで使い分けができることが望ましいのです。

また、次のように出先にて貧弱なWi-Fi環境では、バックグラウンドで走るアプリケーションを抑制したいことがあります。
Wi-Fi名を判定
「The wireless network」+「Wi-Fi名」+「is connected」と指定することで、「Wi-Fi名に接続したら」という条件設定が可能。

これによって、事務所、自宅、それ以外のような条件分岐が可能です。
コンピュータ名
前提条件として、[コンピュータ名]はシステム環境設定の[共有]にて確認(変更)します。

Keyboard Maestroでは、まず、「%MacName%」に対して変数を設定し、Variable Conditionで判定します。

これによって、Macごとの条件分岐が可能です。
ディスプレイの解像度
まず、「%Screen%Main%」に対して変数を設定すると、「0, 0, 2560, 1080」のように「左上の座標、幅、高さ」のようにディスプレイの大きさを参照できます。

この応用で「%Calculate%SCREEN(Main,Width)%」に対して変数を設定すると、「2560」の値が戻りますので、「is =」で判定します(isは文字列のときに利用。数値の場合には「is =」)。

「%Calculate%SCREEN(Main,Width)%」は、「%Calculate%SCREEN(0,Width)%」と書くこともできます。
マルチスクリーンか
「SCREENCOUNT()」でスクリーン数をカウントできます。Calculation Conditionで「SCREENCOUNT() > 1」のように指定することでスクリーン数が2つ以上だったら、の条件分岐が可能です。

Conditions一覧
そもそも、Keyboard Maestroでは、どのようなConditions(条件)が使えるのかを把握しておきたいところ。

Keyboard Maestro 6 Documentation: Conditionsを元にざっくりと訳してみました。
「覚える」必要はありませんが、何ができるかは把握しておくとよさそう。
| 条件 | 意味 |
|---|---|
| Action Result Condition | 最後のアクションの結果(OKか、値を持っているか) |
| Application Condition | アプリが起動中か/前面にあるか |
| Button Condition | ボタンが存在するか/チェックされているか |
| Calculation Condition | 計算結果がゼロでないか |
| Clipboard Condition | クリップボードにテキストか画像を含むか、特定のテキストを含むか |
| Environment Variable Condition | 環境変数が存在するか、特定のテキストが存在するか |
| Found Image Condition | Imageで指定した画像がディスプレイ内(ウィンドウ内)に存在するか |
| Key Condition | 特定のキーが押されているか |
| Location Condition | ネットワーク名に特定の文字列を含んでいるか |
| Macro/Macro Group Condition | 指定したマクロが実行可能か、実行中か |
| Menu Condition | メニュー項目が存在するか、利用可能か、チェックされているか |
| Modifiers Condition | 修飾キーが押されているか |
| Mounted Volume Condition | ディスク(ハードディスク)がマウントされているか |
| Mouse Button Condition | マウスボタンが押されているか |
| OCR Condition | OCR後、クリップボードに特定の言語を含むか |
| Path Condition | ファイル(フォルダー)が特定のパスに存在するか |
| Pixel Condition | スクリーンの特定のピクセルの明るさやカラー、特定のカラーか |
| Script Condition | スクリプトが成功したか |
| Text Condition | 任意のテキストが空か、特定も文字列を持っているか |
| Typed String Condition | 入力された(一連の)キーが押されたか |
| USB Device Condition | 特定の名称のUSBデバイスが存在するか |
| Variable Condition | 指定の変数が存在するか、特定の文字列を持つか |
| Any Window Condition | 開いているウィンドウが存在するか、特定の文字列を持つか |
| Front Window Condition | 最前面のウィンドウが存在するか、特定の文字列を持つか |
| Wireless Network Condition | Wi-Fi名が特定の文字列を持つか |
また、判定には次の4つのオプションがあります。
| 条件 | 意味 |
| Any of the following are true | いずれかが「正」のとき |
| All of the following are true | すべてが「正」のとき |
| None of the following are true | ひとつも「正」でないとき |
| Not all of the following are true | いずれかが「偽」のとき |
メモ
実際にマクロを走らせる前に、薄いグレーで判定結果が「currently true」「currently false」のように確認できます。
ところが、本記事で挙げた条件分岐の場合、実際にマクロを走らせないと判定されないようです。