「Xamarin.Mac/スクリーンをロックする」の版間の差分

提供: MonoBook
ナビゲーションに移動 検索に移動
(ページの作成:「==概要== 業務アプリなんかだと特定の人が使い終わったタイミングでOSのログイン画面まで戻しておきたいことも多いと思う。...」)
 
10行目: 10行目:
  
 
これを[[Xamarin.Mac]]や[[MonoMac]]から外部コマンドとして実行してやるだけでよい。
 
これを[[Xamarin.Mac]]や[[MonoMac]]から外部コマンドとして実行してやるだけでよい。
当初System.Diagnostics.Process.Startで外部コマンドの実行を試みたがopenコマンドのエラーが出て上手くいかなかったので、とりあえずNSTask.LaunchFromPathを使って実現している。
 
 
<source lang="csharp">
 
<source lang="csharp">
 
using System;
 
using System;
31行目: 30行目:
 
     }
 
     }
 
}
 
}
 +
</source>
 +
 +
[[Cocoa]]依存のNSTask.LaunchFromPathメソッドではなく、[[.NET]]標準のSystem.Diagnostics.Process.Startメソッドで外部コマンドを実行してもよい。
 +
ただ叩いているコマンド自体が[[Mac]]依存なのであんまり意味がない。
 +
<source lang="csharp">
 +
            System.Diagnostics.Process.Start(
 +
                "/System/Library/CoreServices/Menu Extras/User.menu/Contents/Resources/CGSession",
 +
                "-suspend"
 +
            );
 
</source>
 
</source>
  

2015年10月22日 (木) 02:06時点における版

概要

業務アプリなんかだと特定の人が使い終わったタイミングで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メソッドで外部コマンドを実行してもよい。 ただ叩いているコマンド自体がMac依存なのであんまり意味がない。

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

関連項目

参考文献