Xamarin.Mac/スクリーンをロックする

提供: MonoBook
< Xamarin.Mac
2015年10月22日 (木) 02:09時点における153.219.225.170 (トーク)による版 (→‎実装:コマンドを叩く)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
ナビゲーションに移動 検索に移動

概要[編集 | ソースを編集]

業務アプリなんかだと特定の人が使い終わったタイミングでOSのログイン画面まで戻しておきたいことも多いと思う。 アプリレベルで認証画面をつけるのは無駄な労力なので、Mac OS Xのユーザー認証をLDAPにして外部に丸投げしたい場合などに活躍する。

実装:コマンドを叩く[編集 | ソースを編集]

ターミナルなどで以下のコマンドを叩くとスクリーンがロックされる。

/System/Library/CoreServices/Menu Extras/User.menu/Contents/Resources/CGSession -suspend

これをXamarin.MacMonoMacから外部コマンドとして実行してやるだけでよい。

using System;
using System.Drawing;
using MonoMac.Foundation;
using MonoMac.AppKit;

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

            NSTask.LaunchFromPath(
                "/System/Library/CoreServices/Menu Extras/User.menu/Contents/Resources/CGSession",
                new []{"-suspend"});
        }
    }
}

Cocoa依存のNSTask.LaunchFromPathメソッドではなく、.NET標準のSystem.Diagnostics.Process.Startメソッドで外部コマンドを実行してもよい。 マルチプラットフォームを前提とするMono系でプログラミングする際には、.NETでも可能なものは.NETで実現するのが望ましいのだろうが、これは叩いているコマンド自体がMac依存なのであんまり意味がない。

            System.Diagnostics.Process.Start(
                "/System/Library/CoreServices/Menu Extras/User.menu/Contents/Resources/CGSession",
                "-suspend"
            );

関連項目[編集 | ソースを編集]

参考文献[編集 | ソースを編集]