「Xamarin.Macでディスプレイのスリープを解除する」の版間の差分
(→関連項目) |
imported>Administrator 細 (Administrator がページ「Xamarin.Mac/ディスプレイのスリープを解除する」を「Xamarin.Macでディスプレイのスリープを解除する」に移動しました) |
||
(2人の利用者による、間の2版が非表示) | |||
51行目: | 51行目: | ||
==関連項目== | ==関連項目== | ||
− | *[[Xamarin.Mac/AppleScriptを実行する]] | + | * [[Xamarin.Mac/スクリーンをロックする]] |
− | *:[[AppleScript]]で似たようなことが出来れば[[言語]]を問わず汎用的なので現在模索している。 | + | * [[Xamarin.Mac/AppleScriptを実行する]] |
− | *[[Xamarin.Mac/キーボードの入力をシミュレートする]] | + | *: [[AppleScript]]で似たようなことが出来れば[[言語]]を問わず汎用的なので現在模索している。 |
− | *:[[スクリーンセーバー]]を解除するには[[キーボード]]が押された状態を再現するのが手っ取り早いようだ。 | + | * [[Xamarin.Mac/キーボードの入力をシミュレートする]] |
+ | *: [[スクリーンセーバー]]を解除するには[[キーボード]]が押された状態を再現するのが手っ取り早いようだ。 | ||
+ | * [[Xamarin.Mac/本体のシリアル番号を取得する]] | ||
==参考文献== | ==参考文献== |
2018年7月18日 (水) 11:09時点における最新版
実装1編集
Mac OS Xの標準ライブラリのひとつであるIOKitのIOPMAssertionDeclareUserActivityメソッドを叩くと「ディスプレイのスリープ」を解除できる[1]。 なお、この例では「コンピューターのスリープ」は解除できないので注意すること。
2015年7月時点のXamarin.MacにはIOKitが用意されていないようだ。そのためP/Invokeでそれらしく叩いてみた。これでいいかは知らんがとりあえず動いている。Xamarin.Mac依存ライブラリは使っていないのでMonoMacでも動くと思うが試してはいない。
using System;
using System.Runtime.InteropServices;
using AppKit;
using CoreFoundation;
namespace WakeUpDisplay
{
static class MainClass
{
enum IOPMUserActive
{
Local,
Remote,
}
[DllImport ("/System/Library/Frameworks/IOKit.framework/IOKit")]
static extern uint IOPMAssertionDeclareUserActivity(
IntPtr assertionName,
IOPMUserActive userType,
out uint assertionId);
static void Main(string[] args)
{
// NS〜クラスを使える状態にする
NSApplication.Init();
// デバッグ用のウェイト
// システム環境設定、Mission Control、ホットコーナーあたりで「ディスプレイのスリープ」を割り当てると捗る。
System.Threading.Thread.Sleep(1000 * 15);
// 「ディスプレイのスリープ」を解除する。
// 「コンピューターのスリープ」は解除されないので注意。
uint assertionId;
CFString name = "";
IOPMAssertionDeclareUserActivity(name.Handle, IOPMUserActive.Local, out assertionId);
name.Dispose();
}
}
}
関連項目編集
- Xamarin.Mac/スクリーンをロックする
- Xamarin.Mac/AppleScriptを実行する
- AppleScriptで似たようなことが出来れば言語を問わず汎用的なので現在模索している。
- Xamarin.Mac/キーボードの入力をシミュレートする
- Xamarin.Mac/本体のシリアル番号を取得する