AppleEvents/OSAScript を使用して設定ペイン自体を操作しようと考えたことはありますか? Network prefs ペインは完全に組み込みのスクリプト機能を備えた唯一のペインのようですが、System Events を使用して任意の UI を操作できます。AppleScript でプロトタイプを作成するのは簡単でした。これが私が思いついたものです:
tell application "System Preferences"
reveal pane "Date & Time"
reveal anchor "ClockPref" of pane "Date & Time"
tell application "System Events"
tell tab group 1 of window 1 of process "System Preferences"
repeat with cbIndex from 0 to count of checkboxes
tell checkbox cbIndex
if title contains "menu bar" then
click
exit repeat
end if
end tell
end repeat
end tell
end tell
quit
end tell
NSAppleScript オブジェクトを使用してそのまま使用することも、自虐的であると感じている場合は、送信するのに適切な AppleEvents を見つけるという詳細に飛び込むこともできます。(正気を保つために前者のアプローチをお勧めしますが、後者の方が実行時の実行速度が速くなります。)
長所:簡単。
短所:システム環境設定を起動します(Dockで跳ね返っているように見えます)、「補助デバイスのアクセスを有効にする」を有効にする必要があります(他の多くのものと同様)
これがSystemUIServer を強制終了するよりも視覚的に良いか悪いかを言うのは難しいですが、SystemUIServer と対話している可能性のある他のコンポーネントに対してはほぼ確実に親切です。
ドックのバウンスを取り除く限り、ここのこの質問では、ドックアイコンなしで物事を起動する方法について言及しています. これに付け加えることができるのは、過去に私がこの問題と格闘したことがあるということです。
- 一意の安全な一時ディレクトリを取得する
- 問題のアプリのバンドル全体のハードリンクのみのミラーを作成します (
pax -rwl
これに役立ちます)
- ハードリンクされた Info.plist を実際の Info.plist のコピーに置き換えます
- 他の質問の指示に従ってコピーを編集します。(注: ここで設定する以外のオプションもありますが
NSUIElement = true
、読者と Google の課題として残します。)
- 一時ディレクトリからアプリケーションを使用する
- 一時ディレクトリを削除します。
このアプローチは、サードパーティのアプリケーションを動かそうとしたときに非常に堅牢であることが証明されました. 将来、署名/サンドボックス化されたシステム アプリケーションで問題が発生する可能性があると思います。(つまり、Info.plist を変更すると署名が変更され、実行を拒否される可能性があります。) また、当然のことながら、サンドボックス化されたアプリには、AppleEvents を送信するための特定の権限または例外が必要ですが、これはシステム プロセスの強制終了にも当てはまると思います。 (サンドボックス化されたアプリからそれが可能であれば。)
最後に、これが重要であると思われる場合は、Apple にバグ レポートを提出して、ファースト クラスの API またはスクリプト機能を要求する必要があります。