分類:[C#]
2021/02/11(Thu) 17:06:07 編集(投稿者)
開発環境
Visual Studio 2019
C#
WPF
.NET Framework 4.8
動作環境
Windows 10
C#のWPFアプリからWindows設定の画面の向きを変更したいのですが可能でしょうか?
変更したいのは下記の設定です。
設定->システム->ディスプレイ->画面の向き
→横 or 縦 or 横(反対向き) or 縦(反対向き)
http://bbs.wankuma.com/index.cgi?mode=al2&namber=78110&KLOG=133
を参考に、SetDisplayAutoRotationPreferencesをやってみたのですが
正常終了はしますが何も変わりませんでした。
-- 画面の向き変更クラス
public class AutoRotation
{
[Flags]
public enum AR_STATE : int
{
AR_ENABLED = 0x0,
AR_DISABLED = 0x1,
AR_SUPPRESSED = 0x2,
AR_REMOTESESSION = 0x4,
AR_MULTIMON = 0x8,
AR_NOSENSOR = 0x10,
AR_NOT_SUPPORTED = 0x20,
AR_DOCKED = 0x40,
AR_LAPTOP = 0x80
};
public enum ORIENTATION_PREFERENCE : int
{
ORIENTATION_PREFERENCE_NONE = 0x0,
ORIENTATION_PREFERENCE_LANDSCAPE = 0x1,
ORIENTATION_PREFERENCE_PORTRAIT = 0x2,
ORIENTATION_PREFERENCE_LANDSCAPE_FLIPPED = 0x4,
ORIENTATION_PREFERENCE_PORTRAIT_FLIPPED = 0x8
};
public static bool IsRotateEnabled()
{
AR_STATE autoRotationState = 0;
bool success = GetAutoRotationState(out autoRotationState);
if (!success)
{
return false; // disable
}
return autoRotationState.HasFlag(AR_STATE.AR_ENABLED);
}
public static ORIENTATION_PREFERENCE GetRotation()
{
ORIENTATION_PREFERENCE orientation;
bool success = GetDisplayAutoRotationPreferences(out orientation);
if (!success)
{
return ORIENTATION_PREFERENCE.ORIENTATION_PREFERENCE_NONE;
}
return orientation;
}
public static bool SetRotation(ORIENTATION_PREFERENCE orientation)
{
return SetDisplayAutoRotationPreferences(orientation);
}
[DllImport("user32.dll")]
private static extern bool GetAutoRotationState(out AR_STATE pState);
[DllImport("user32.dll")]
private static extern bool GetDisplayAutoRotationPreferences(out ORIENTATION_PREFERENCE pOrientation);
[DllImport("user32.dll")]
private static extern bool SetDisplayAutoRotationPreferences(ORIENTATION_PREFERENCE orientation);
}
-- 呼び出し
Console.WriteLine($"{AutoRotation.GetRotation()}");
AutoRotation.SetRotation(AutoRotation.ORIENTATION_PREFERENCE.ORIENTATION_PREFERENCE_PORTRAIT);