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

Как получить состояние автоповорота экрана (отключить или включить) с помощью 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);
 翔 羽29 мая 2013 г., 10:17
Отлично! Это работа! Ключевое слово - "EntryPoint =" # 2507 ". Спасибо за вашу помощь!
 23 мар. 2017 г., 22:59
Этот API не документирован и не поддерживается :-(. Он не пройдет сертификацию приложений, Win32 или Store. MSFT оставляет за собой право удалить или изменить его в любое время.

Реестр и горячая клавиша Windows + O работают на системном уровне, настраивая пользовательские настройки. Приложения не должны связываться с этим. Существует способ установки параметров автоматического поворота на уровне приложения, и как только пользователь закрывает ваше приложение или переключается на другое, его существующие настройки (или другое приложение) вступают во владение.

MSDN имеет хороший пример использования соответствующих API здесь:https://code.msdn.microsoft.com/windowsapps/Auto-Rotation-Preferences-87ae2902

Если у вашего приложения есть только одно предпочтение для автоповорота, которое оно сохраняет на протяжении всей жизни, тогда проще всего установить его в своем манифесте. Есть несколько вариантов, которые вы не можете получить с помощью API, таких как поддержка перевернутого ландшафта и ландшафта.

 28 сент. 2015 г., 10:25
Спасибо за информацию, Кэти. У меня были проблемы с получением вызова API AutoRotationPreferences, чтобы фактически получить / установить правильную настройку. Это сработалоmost времени, но иногда без видимой причины это не удалось. Поэтому я выбрал более надежный, но более общесистемный параметр реестра. В моем приложении это единственная вещь, к которой пользователь должен иметь доступ, так что это не проблема, связанная с изменениями в масштабе всей системы.

Я нашел ответ.

        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);

Надеюсь, что это может помочь другим людям.

 18 июн. 2012 г., 14:02
Какой включаемый файл содержит определение enum tagAR_STATE?

Этот пример MSDN кажется, делает работу, используя то, что выглядит как «официальный»; Вызов API,SetDisplayAutoRotationPreferences, который находится в User32.dll (не kernel.dll, как показано в примере) и определяется в WinUser.h.

Преимущество этого примера перед другими предложениями состоит в том, что он сначала проверяет, поддерживается ли и в первую очередь автоповорот.

 翔 羽29 янв. 2015 г., 03:17
SetDisplayAutoRotationPreferences Устанавливает настройки автоматического поворота экрана для текущего процесса. Это для «текущего процесса», а не для системы. Спасибо за вашу помощь!!
 30 янв. 2015 г., 11:08
Похоже, что после многократного тестирования, эта настройка работает не очень хорошо. В моем приложении это не работает, если быть точным. Поэтому я переключился на использование ключа реестра, который работает каждый раз (но для всей системы).

Другая альтернатива, и именно эта, похоже, постоянно работает на моем планшете. Проверьте этот раздел реестра. Вы также можете изменить ключ, и устройство сразу же поймет изменение:

Ключ:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\AutoRotation

Окружение:Enable

Это DWORD, поэтому установите 0, чтобы отключить автоповорот, или 1, чтобы включить автоповорот.

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

 25 сент. 2015 г., 18:13
Комментируя, чтобы пинговать вас - я только что опубликовал ответ о том, как установить предпочтительную ориентацию вашего приложения, не вмешиваясь в настройки пользователя.

Ваш ответ на вопрос