差分

ナビゲーションに移動 検索に移動

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

2,523 バイト追加, 2015年10月14日 (水) 02:57
ページの作成:「Xamarin.Macで作ったアプリから設定変更を促すためにMac OS Xシステム環境設定Windowsでいうコントロールパネル)...」
[[Xamarin.Mac]]で作ったアプリから設定変更を促すために[[Mac OS X]]の[[システム環境設定]]([[Windows]]でいうコントロールパネル)を開きたい。

==実装:Scripting Bridgeを利用する==
以下の[[Objective-C]]での実装を見ながら試してみた。
*https://github.com/NSGod/OpenSystemPrefsTTS

2015年10月時点でのXamarin.MacではScripting Bridgeの一部クラスのみが利用できる。
システム環境設定を開くだけであれば簡単にできた。
<source lang="csharp">
using System;
using System.Drawing;
using MonoMac.Foundation;
using MonoMac.AppKit;
using MonoMac.ObjCRuntime;
using MonoMac.ScriptingBridge;

namespace TestOpenSystemPreferences
{
class MainClass
{
static void Main(string[] args)
{
NSApplication.Init();
//NSApplication.Main(args);

var systemPrefs = SBApplication.FromBundleIdentifier(@"com.apple.systempreferences");
systemPrefs.Activate();
}
}
}
</source>

さらに内側の値はValueForKeyメソッドを使えばNSObjectとして抜ける。
非常に煩雑だがこれを繰り返せば各種設定画面を開いたり設定値を抜いたりもできる。
マッピング用のクラスを作ればもっと楽になると思われる。
<source lang="csharp">
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);
}
</source>

==実装:パネル直叩き==
システム環境設定の各種設定画面(パネル)は「/System/Library/PreferencePanes/」以下にファイルとして存在しているので直叩きしてやる。
この方法は手軽だが、タブを切り替えたり、設定値を取れないなどの問題点も多々ある。
なお設定値は[[defaultsコマンド]]で取れるのが普通なのでそちらと組み合わせれば何とかなるかもしれない。

どちらにしろ非公式の値を決め打ち実装するのは危険なので非推奨である。
<source lang="csharp">
NSWorkspace.SharedWorkspace.OpenUrl(NSUrl.FromFilename(@"/System/Library/PreferencePanes/Security.prefPane"));
</source>

==関連項目==

==参考文献==
{{reflist}}

{{stub}}

[[category:Xamarin.Mac]]
匿名利用者

案内メニュー