【问题标题】:How to detect tablet mode如何检测平板电脑模式
【发布时间】:2017-03-30 00:03:58
【问题描述】:

我正在使用以下代码来检测用户是否处于平板电脑模式。我在 Surface Pro 上,当我解耦键盘并将 PC 变成平板电脑时,IsTabletMode 返回 true(它应该返回 true。)当我使用“平板电脑模式”按钮而不解耦屏幕时,IsTabletMode 总是返回假。有没有人遇到过这种情况,我该如何解决?

/*
 * 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;
   }
}

【问题讨论】:

  • PC 是否在平板电脑模式下检测到键盘且键盘已连接? (我无法检查。)如果是这样,您应该能够根据键盘的存在添加逻辑。
  • PC 在平板电脑模式下会检测到键盘。我不想检测键盘是否存在,我希望将我的应用程序的主题与 Windows“平板电脑”主题相匹配。您知道更大的按钮等。键盘的存在与此无关。
  • 您是否尝试过您已链接的答案问题中发布的“解决方案”?

标签: c# winforms


【解决方案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);
   }

编辑: 您可能需要定期检查这一点,因为没有任何事件可以查看 PC 的平板电脑模式是否已打开

【讨论】:

  • @SP1026,感谢您的回复。不幸的是,我们取消了这个功能。但是,我们从来没有在这里解决过这个问题。问题是 Windows 10 允许用户使用屏幕右下角的操作面板切换到平板电脑模式。这意味着只要 PC 支持触控,用户可以随时切换到平板模式,即使他们连接了键盘。我一直在寻找一种方法来检测 PC 是否已切换到平板电脑模式,无论它是否支持触摸、是否连接了键盘或任何其他变体。
  • 我的问题中的代码确实成功测试了用户是否拥有平板电脑,但无法检查 Windows 10 本身是否处于平板电脑模式。当我解耦键盘时,我的电脑问我是否要切换到平板电脑模式,我总是单击“否”。这是我问题中的代码无法满足我的需求的地方。
  • 编辑了答案,让我知道 GetSystemMetrics(SM_CONVERTIBLESLATEMODE) 在平板电脑模式和非平板电脑模式下返回什么。
猜你喜欢
  • 1970-01-01
  • 2012-11-10
  • 1970-01-01
  • 1970-01-01
  • 2012-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多