Как получить статус автоповорота экрана?

Как получить статус автоповорота экрана (отключить или включить) с помощью 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, чтобы включить автоповорот.

Теперь, если бы я только мог найти способ заставить приложение работать только в ландшафтном режиме!...

Другие вопросы по тегам