项目原因,研究了一下C# winform程序在平板电脑运行时,只能横屏显示的方法。
一开始接到任务时,心里直接否定,觉得纯属扯淡。。。。闲的。。。。一个窗体程序,还想在平板上这么矫情的运行。还TMD的不让锁屏幕,用户也是够精致(jian↘)
之后再金钱的诱惑下(哎,钱也没到我手),好吧,职业操守。。。各种脑补(我承认智商低限制了我的想象力),bingo(散花)。
拢共下面几步哈~
1.首先学习一下DllImport的用法
2.找到
一开始接到任务时,心里直接否定,觉得纯属扯淡。。。。闲的。。。。一个窗体程序,还想在平板上这么矫情的运行。还TMD的不让锁屏幕,用户也是够精致(jian↘)
之后再金钱的诱惑下(哎,钱也没到我手),好吧,职业操守。。。各种脑补(我承认智商低限制了我的想象力),bingo(散花)。
拢共下面几步哈~
1.首先学习一下DllImport的用法
2.找到
[DllImport("user32.dll")]
private static extern bool GetAutoRotationState(out AR_STATE pState);
private static extern bool GetAutoRotationState(out AR_STATE pState);
[DllImport("user32.dll")]
private static extern bool GetDisplayAutoRotationPreferences(out ORIENTATION_PREFERENCE pOrientation);
private static extern bool GetDisplayAutoRotationPreferences(out ORIENTATION_PREFERENCE pOrientation);
[DllImport("user32.dll")]
private static extern bool SetDisplayAutoRotationPreferences(ORIENTATION_PREFERENCE orientation);
private static extern bool SetDisplayAutoRotationPreferences(ORIENTATION_PREFERENCE orientation);
这些与屏幕翻转有管的function都在哪个dll里。
3.自定义类AutoRotation
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
};
{
[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
};
{
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
}
{
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;
}
{
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);
}
{
return SetDisplayAutoRotationPreferences(orientation);
}
public static void TestBeep(int frequency, int duration)
{
Beep(frequency, duration);
}
{
Beep(frequency, duration);
}
[DllImport("user32.dll")]
private static extern bool GetAutoRotationState(out AR_STATE pState);
private static extern bool GetAutoRotationState(out AR_STATE pState);
[DllImport("user32.dll")]
private static extern bool GetDisplayAutoRotationPreferences(out ORIENTATION_PREFERENCE pOrientation);
private static extern bool GetDisplayAutoRotationPreferences(out ORIENTATION_PREFERENCE pOrientation);
[DllImport("user32.dll")]
private static extern bool SetDisplayAutoRotationPreferences(ORIENTATION_PREFERENCE orientation);
private static extern bool SetDisplayAutoRotationPreferences(ORIENTATION_PREFERENCE orientation);
}
4.调用SetRotation,即可设置
本文档已存档,并且将不进行维护。
ORIENTATION_PREFERENCE enumeration
Indicates the screen orientation preference for a desktop app process.
Syntax
C++
typedef enum _ORIENTATION_PREFERENCE { ORIENTATION_PREFERENCE_NONE = 0x0, ORIENTATION_PREFERENCE_LANDSCAPE = 0x1, ORIENTATION_PREFERENCE_PORTRAIT = 0x2, ORIENTATION_PREFERENCE_LANDSCAPE_FLIPPED = 0x4, ORIENTATION_PREFERENCE_PORTRAIT_FLIPPED = 0x8 } ORIENTATION_PREFERENCE;
Constants
-
ORIENTATION_PREFERENCE_NONE
-
The process has no device orientation preferences. The system may choose any available setting.
ORIENTATION_PREFERENCE_LANDSCAPE
-
The process represents a desktop app that can be used in landscape mode.
ORIENTATION_PREFERENCE_PORTRAIT
-
The process represents a desktop app that can be used in portrait mode.
ORIENTATION_PREFERENCE_LANDSCAPE_FLIPPED
-
The process represents a desktop app that can be used in flipped landscape mode.
ORIENTATION_PREFERENCE_PORTRAIT_FLIPPED
-
The process represents a desktop app that can be used in flipped portrait mode.
好了,抛砖完毕,处女作,懒呀(打字累),有的也说不明白,好吧,没有文化就是可怕。
干编程10多年,啥都没有留下,现在开始希望不太晚。