メインメニューを開く

差分

Xamarin.Mac/システム環境設定を開く

2,076 バイト追加, 2015年10月14日 (水) 09:38
Console.WriteLine(id);
}
</source>
 
動的なメソッド呼び出しはPerformSelectorメソッドで行える。Xamarin公式のScripting Bridgeで[[Finder]]を制御しているサンプルを参考に実装したのでこれで正しいのかは知らん。<ref>https://github.com/mono/monomac/blob/master/samples/attic/ScriptingBridgeFinder/MainWindowController.cs</ref>。
<source lang="csharp">
static void Main(string[] args)
{
NSApplication.Init();
//NSApplication.Main(args);
 
// システム環境設定
var systemPrefs = SBApplication.FromBundleIdentifier(@"com.apple.systempreferences");
//systemPrefs.Activate();
 
var panes = systemPrefs.ValueForKey(new NSString("panes")) as SBElementArray;
for (int i = 0; i < panes.Count; i++)
{
var pane = panes.GetItem<NSObject>(i);
var id = pane.ValueForKey(new NSString("id")) as NSString;
Console.WriteLine(id);
 
// セキュリティとプライバシー
if (id == "com.apple.preference.security")
{
var anchors = pane.ValueForKey(new NSString("anchors")) as SBElementArray;
for (int j = 0; j < anchors.Count; j++)
{
var anchor = anchors.GetItem<NSObject>(j);
var name = anchor.ValueForKey(new NSString("name")) as NSString;
Console.WriteLine(name);
 
// アクセシビリティ
if (name == "Privacy_Accessibility")
{
anchor.PerformSelector(new Selector("reveal"));
 
// 表示
systemPrefs.Activate();
}
}
}
}
}
</source>
==実装:パネル直叩き==
システム環境設定の各種設定画面(パネル)は「/System/Library/PreferencePanes/」以下に独立したアプリとして存在しているので直叩きしてやる。」以下に独立したアプリ([[拡張子]]はappではなくprefPane)として存在しているので直叩きしてやる。
この方法は手軽だが、タブを切り替えたり、設定値を取れないなどの問題点も多々ある。
なお設定値はなおシステム環境設定の各種設定値は[[defaultsコマンド]]で取れるのが普通なのでそちらと組み合わせれば何とかなるかもしれない。で読み書きできるのが普通なのでそちらと組み合わせれば何とかなるかもしれない。
どちらにしろ非公式の値を決め打ち実装するのは危険なので非推奨である。
==関連項目==
*[[Xamarin.Mac/Global Event Monitorでキー入力を監視する]]
==参考文献==
匿名利用者