如何检测平板电脑模式

16
我正在使用以下代码来检测用户是否处于平板模式。我在Surface Pro上使用时,当我分离键盘并将PC变成平板电脑时,IsTabletMode返回true(这是应该的)。但是,当我在没有分离屏幕的情况下使用"平板电脑模式"按钮时,IsTabletMode始终返回false。有人遇到过这种情况吗?我该如何解决?
/*
 * Credit to Cheese Lover
 * Retrieved From: https://dev59.com/Wl0Z5IYBdhLWcg3wtSLr
 */
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;
   }
}

电脑在平板模式下并且键盘已连接时,是否能够检测到键盘?(我无法检查。)如果可以的话,您应该能够根据键盘的存在添加逻辑。 - Tobbs
当平板模式时,PC可以检测到键盘。我不是想检测键盘是否存在,而是想将我的应用程序主题与Windows的“平板”主题相匹配。你知道,更大的按钮等等。键盘的存在与此无关。 - S. Walker
你尝试过在你链接的答案的问题中发布的“解决方案”了吗? - Brunner
1个回答

2
编辑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);
   }

编辑: 您可能需要定期检查此内容,因为没有事件可以查看PC的平板模式是否已打开


@SP1026,感谢您的回复。不幸的是,我们放弃了这个功能。然而,我们从未解决这个问题。问题在于Windows 10允许用户使用屏幕右下角的操作面板切换到平板模式。这意味着只要PC支持触摸,用户就可以随时切换到平板模式,即使他们连接了键盘。我正在寻找一种方法来检测PC是否已经切换到平板模式,而不管它是否支持触摸,是否连接了键盘或任何其他变化。 - S. Walker
我的问题中的代码确实可以成功测试用户是否拥有平板电脑,但它未能检查Windows 10本身是否处于平板模式。当我分离键盘时,我的电脑会询问我是否要切换到平板模式,我总是选择否。这就是我问题中的代码无法满足我的需求的地方。 - S. Walker
编辑了答案,请告诉我当平板模式和非平板模式下 GetSystemMetrics(SM_CONVERTIBLESLATEMODE) 返回的值。 - SP1062

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接