如何在windows8中通过Regetry或ACPI获取屏幕自动旋转的状态(禁用或启用)?
我需要禁用屏幕自动旋转,我将使用 winkey + O 更改屏幕自动旋转控制。
有没有人有类似的经历?
如何在windows8中通过Regetry或ACPI获取屏幕自动旋转的状态(禁用或启用)?
我需要禁用屏幕自动旋转,我将使用 winkey + O 更改屏幕自动旋转控制。
有没有人有类似的经历?
如果您想更改自动旋转状态,下面可能会有所帮助:
//C++
typedef BOOL (WINAPI* SETAUTOROTATION)(BOOL bEnable);
SETAUTOROTATION SetAutoRotation = (SETAUTOROTATION)GetProcAddress(GetModuleHandle(TEXT("user32.dll")), (LPCSTR)2507);
if(SetAutoRotation != NULL)
{
SetAutoRotation(TRUE);
}
或者
//C#
[DllImport("user32.dll", EntryPoint = "#2507")]
extern static bool SetAutoRotation(bool bEnable);
SetAutoRotation(true);
我找到了答案。
public enum tagAR_STATE : uint
{
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
}
[DllImport("user32.dll")]
public static extern bool GetAutoRotationState(ref tagAR_STATE input);
希望可以帮助其他人。
这个 MSDN 示例似乎完成了这项工作,使用看起来像“官方”API 调用的东西SetDisplayAutoRotationPreferences
,它位于 User32.dll(不是示例所述的 kernel.dll)中,并在 WinUser.h 中定义。
此示例相对于其他建议的优势在于它首先检查是否支持并启用自动旋转。
注册表和 Windows+O 热键在系统级别工作,调整用户设置。应用程序不应该弄乱它。有一种应用程序级别的方式来设置自动旋转首选项,一旦用户关闭您的应用程序或切换到另一个应用程序,他们现有的设置(或其他应用程序)就会接管。
MSDN 在这里有一个使用相关 API 的好例子:https ://code.msdn.microsoft.com/windowsapps/Auto-Rotation-Preferences-87ae2902
If your app has only one autorotation preference that it keeps throughout its lifetime, then it is simplest to just set it in your manifest. There are a few options there that you don't get with the APIs such as supporting both landscape and landscape flipped.
另一种选择,这是在我的平板电脑上似乎始终如一的选择。检查此注册表项。您还可以更改密钥,设备将立即获取更改:
钥匙:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\AutoRotation
环境:Enable
它是一个 DWORD,因此设置为 0 以禁用自动旋转或设置为 1 以启用自动旋转。
现在,如果我能找到一种方法来强制应用程序仅在横向模式下工作!...