Как определить, находится ли Windows 10 в режиме планшета

Я пытаюсь найти способ определить, находится ли Windows 10 в режиме планшета или нет. Обратите внимание, речь не идет о том, чтобы узнать, есть ли у пользователя планшетный компьютер или нет — это можно решить с помощью GetSystemMetrics(SM_CONVERTIBLESLATEMODE). В моем случае вышеприведенная функция всегда возвращает 0 - независимо от того, находится ли Win10 в режиме планшета или нет.

Этот поток без эпилога, похоже, предполагает, что нет вызова WinAPI, который мог бы обнаружить Tablet режим. Я надеюсь, что это не так, поскольку ОС отправляет разные WM-сообщения, независимо от того, находится она в режиме планшета или нет. В режиме планшета WM_SHOWWINDOW не отправляется, что означает, что мне нужно решить проблему запуска приложение по-другому, если Windows 10 находится в режиме планшета.

Я мог бы просто переместить код, который в настоящее время запускается после получения сообщения WM_SHOWWINDOW, куда-то еще (сразу после вызова ShowWindow), но тогда я получаю сообщение WM_DPICHANGED с нулевыми параметрами.


person Dan    schedule 18.03.2019    source источник
comment
Может GetSystemMetrics() (docs.microsoft.com /en-us/windows/desktop/api/winuser/) с помощью SM_TABLETPC?   -  person Michael Chourdakis    schedule 18.03.2019
comment


Ответы (1)


Вы можете использовать UIViewSettings.UserInteractionMode, как указал @Raymond.

См. "Режим планшета" "Как узнать, находится ли мой ПК в режиме планшета?"

person Rita Han    schedule 19.03.2019
comment
Гм, это не задокументировано и не поддерживается. Используйте поддерживаемый API: UserInteractionMode. - person Raymond Chen; 19.03.2019
comment
Образцы в блоге от @RaymondChen и на странице документации Windows, упомянутой @RitaHan, кажутся тем, что я ищу. Однако после их реализации я получаю сообщение pointer to incomplete type not allowed для uiViewSettingsInterop->GetForWindow, хотя я включаю UIViewSettingsInterop.h . Мой NTDDI_VERSION - 0x0603 (нацелен на Win8.1 и выше). Я упускаю что-то очевидное? - person Dan; 19.03.2019
comment
IUIViewSettingsInterop поддерживается, начиная с Windows 10. Обратите внимание, что определение IUIViewSettingsInterop находится внутри #if (NTDDI_VERSION >= NTDDI_WINTHRESHOLD). - person Raymond Chen; 19.03.2019