「Xamairn.Macで接続されているディスプレイの一覧を取得する」の版間の差分
ナビゲーションに移動
検索に移動
(ページの作成:「Macに接続されているディスプレイの一覧はCore GraphicsのCGGetOnlineDisplayListメソッドで取得できる。 MacBookなどに外部ディスプレイ...」) |
|||
2行目: | 2行目: | ||
MacBookなどに外部ディスプレイを繋げてクラムシェル(ノートの蓋を閉じて使う)で使っている場合は本体側のディスプレイは結果に含まれない。 | MacBookなどに外部ディスプレイを繋げてクラムシェル(ノートの蓋を閉じて使う)で使っている場合は本体側のディスプレイは結果に含まれない。 | ||
そこまで取りたい場合について調べていない。 | そこまで取りたい場合について調べていない。 | ||
+ | |||
Xamarin.MacでP/Invokeメソッドの引数に配列に渡すときはIntPtrに変換する必要がある点が若干めんどくさい。 | Xamarin.MacでP/Invokeメソッドの引数に配列に渡すときはIntPtrに変換する必要がある点が若干めんどくさい。 | ||
2016年11月17日 (木) 05:24時点における版
Macに接続されているディスプレイの一覧はCore GraphicsのCGGetOnlineDisplayListメソッドで取得できる。 MacBookなどに外部ディスプレイを繋げてクラムシェル(ノートの蓋を閉じて使う)で使っている場合は本体側のディスプレイは結果に含まれない。 そこまで取りたい場合について調べていない。
Xamarin.MacでP/Invokeメソッドの引数に配列に渡すときはIntPtrに変換する必要がある点が若干めんどくさい。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using Foundation;
using AppKit;
using CoreGraphics;
namespace OnlineDisplayList
{
[Register("AppDelegate")]
public class AppDelegate : NSApplicationDelegate
{
public AppDelegate()
{
}
[DllImport("/System/Library/Frameworks/CoreGraphics.framework/CoreGraphics")]
static extern int CGGetOnlineDisplayList(
int maxDisplays,
IntPtr onlineDisplays,
out int displayCount);
[DllImport("/System/Library/Frameworks/CoreGraphics.framework/CoreGraphics")]
static extern CGRect CGDisplayBounds(int displayId);
public override void DidFinishLaunching(NSNotification notification)
{
// ディスプレイ一覧を取得する
// MacBookなどでクラムシェルにしている場合は一覧に含まれない。
int displayMax = 16;
int displayCount = 0;
int memSize = Marshal.SizeOf(typeof(UInt32)) * displayMax;
IntPtr memPtr = Marshal.AllocCoTaskMem(memSize);
CGGetOnlineDisplayList(displayMax, memPtr, out displayCount);
int[] displays = new int[displayCount];
Marshal.Copy(memPtr, (int[])displays, 0, displayCount);
// ディスプレイ一覧から個々の位置と解像度を得る
foreach (var display in displays)
{
var rect = CGDisplayBounds(display);
Console.WriteLine(rect);
}
}
}
}
関連項目
- Xamarin.Mac/Retina Displayか判別する
- Xamarin.Mac/ディスプレイの設定変更を検出する
- Xamarin.Mac/NSOpenGLViewをRetina Displayに対応させる