Estoy usando el siguiente código para detectar si un usuario está en modo tableta o no. Estoy en una Surface Pro y cuando desacoplo el teclado y convierto la PC en una tableta, IsTabletMode devuelve verdadero (lo que debería). Cuando uso el botón "Modo de tableta" sin desacoplar la pantalla, IsTabletMode siempre devuelve falso. ¿Alguien ha experimentado esto y cómo puedo resolverlo?
/* * Credit to Cheese Lover * Retrieved From: http://stackoverflow.com/questions/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; } }Edición 2: SM_TABLETPC solo es compatible con Windows XP Tablet PC Edition y Windows Vista. No parece haber ninguna referencia a Windows 10 aquí: https://msdn.microsoft.com/en-us/library/windows/desktop/ms700675(v=vs.85).aspx
Puede usar esto: GetSystemMetrics(SM_CONVERTIBLESLATEMODE). Un "0" devuelto significa que está en modo tableta. Un "1" devuelto significa que está en modo sin tableta. https://software.intel.com/en-us/articles/how-to-write-a-2-in-1-aware-application
¿Puedes reemplazar el método QueryTabletMode con esto:
private static Boolean QueryTabletMode () { int state = GetSystemMetrics(SM_CONVERTIBLESLATEMODE); return (state == 0); }Editar: es posible que deba verificar esto periódicamente ya que no hay ningún evento para ver si el modo de tableta de la PC estaba activado