Как получить статус автоповорота экрана?
Как получить статус автоповорота экрана (отключить или включить) с помощью Regetry или ACPI в Windows8?
Мне нужно отключить автоповорот экрана, и я буду использовать winkey + O, чтобы изменить управление автоповоротом экрана.
У кого-нибудь есть подобный опыт?
5 ответов
Ниже может быть полезно, если вы хотите изменить статус автоповорота:
//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);
Реестр и горячая клавиша Windows+O работают на системном уровне, настраивая пользовательские настройки. Приложения не должны связываться с этим. Существует способ установки параметров автоматического поворота на уровне приложения, и как только пользователь закрывает ваше приложение или переключается на другое, его существующие настройки (или другое приложение) вступают во владение.
MSDN имеет хороший пример использования соответствующих API здесь: https://code.msdn.microsoft.com/windowsapps/Auto-Rotation-Preferences-87ae2902
Если у вашего приложения есть только одно предпочтение для автоповорота, которое оно сохраняет на протяжении всей жизни, проще всего установить его в своем манифесте. Там есть несколько вариантов, которые вы не получите с API, таких как поддержка перевернутого ландшафта и ландшафта.
Я нашел ответ.
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.
Преимущество этого примера перед другими предложениями состоит в том, что он сначала проверяет, поддерживается ли и в первую очередь автоповорот.
Другая альтернатива, и именно она, похоже, постоянно работает на моем планшете. Проверьте этот раздел реестра. Вы также можете изменить ключ, и устройство сразу же поймет изменение:
Ключ: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\AutoRotation
Окружение: Enable
Это DWORD, поэтому установите 0, чтобы отключить автоповорот, или 1, чтобы включить автоповорот.
Теперь, если бы я только мог найти способ заставить приложение работать только в ландшафтном режиме!...