Как определить режим планшета

Я использую следующий код, чтобы определить, находится ли пользователь в режиме планшета или нет. Я нахожусь на Surface Pro, и когда я отключаю клавиатуру и превращаю ПК в планшет, IsTabletMode возвращает true (что ему нужно.) Когда я использую кнопку "Режим планшета" без развязки экрана, IsTabletMode всегда возвращает false. Кто-нибудь испытал это и как я могу его решить?

/*
 * Credit to Cheese Lover
 * Retrieved From: http://stackoverflow.com/info/31153664/how-can-i-detect-when-window-10-enters-tablet-mode-in-a-windows-forms-applicatio
 */
public static class TabletPCSupport
{
   private static readonly int SM_CONVERTIBLESLATEMODE = 0x2003;
   private static readonly int SM_TABLETPC = 0x56;

   private Boolean isTabletPC = false;

   public Boolean SupportsTabletMode { get { return isTabletPC; }}

   public Boolean IsTabletMode 
   {
       get
       {
           return QueryTabletMode();
       }
   }

   static TabletPCSupport ()
   {
        isTabletPC = (GetSystemMetrics(SM_TABLETPC) != 0);
   }

   [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto, EntryPoint = "GetSystemMetrics")]
   private static extern int GetSystemMetrics (int nIndex);

   private static Boolean QueryTabletMode ()
   {
       int state = GetSystemMetrics(SM_CONVERTIBLESLATEMODE);
       return (state == 0) && isTabletPC;
   }
}

Ответ 1

Изменить 2: SM_TABLETPC поддерживается только в Windows XP Tablet PC Edition и Windows Vista. Здесь, похоже, нет ссылки на Windows 10: https://msdn.microsoft.com/en-us/library/windows/desktop/ms700675(v=vs.85).aspx

Вы можете использовать это: GetSystemMetrics (SM_CONVERTIBLESLATEMODE). Возврат "0" означает, что он находится в режиме планшета. Возврат "1" означает, что он находится в режиме без таблеток. https://software.intel.com/en-us/articles/how-to-write-a-2-in-1-aware-application

Можете ли вы заменить метод QueryTabletMode следующим образом:

   private static Boolean QueryTabletMode ()
   {
       int state = GetSystemMetrics(SM_CONVERTIBLESLATEMODE);
       return (state == 0);
   }

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