2017-03-30 91 views
10

我正在使用以下代码来检测用户是否处于平板电脑模式。我于表面的Pro和我分离键盘,使PC变成一个平板电脑,IsTabletMode真(这是它应该)当我用“平板模式”按钮而不去耦屏幕,IsTabletMode始终返回false。有没有人遇到过这个问题,我该如何解决?如何检测平板电脑模式

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

不PC在Tablet模式下检测键盘并连接键盘? (我不能检查这个。)如果是这样,你应该能够添加基于键盘存在的逻辑。 –

+0

在平板电脑模式下,PC确实检测到键盘。我不想检测键盘是否存在,我正在寻找与Windows“平板电脑”主题相匹配的应用程序主题。你知道更大的按钮等。键盘的存在对此没有影响。 –

+0

您是否尝试过在所链接的答案问题中发布的“解决方案”? – Brunner

回答

1

编辑2: 的SM_TABLETPC只能由Windows XP Tablet PC版和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); 
    } 

编辑: 您可能需要周期性地检查这个,因为没有活动,看看电脑的平板电脑模式已开启

+0

@ SP1026,谢谢你的回应。不幸的是,我们放弃了这个功能。但是,我们在这里从来没有解决过这个问题。问题在于Windows 10允许用户使用屏幕右下角的操作窗格切换到平板电脑模式。这意味着只要PC支持触摸,即使用户连接了键盘,用户也可以随时切换到平板电脑模式。我正在寻找一种方法来检测PC是否已切换到平板电脑模式,无论它支持触摸的能力,是否连接了键盘或其他任何变体。 –

+0

我的问题中的代码确实可以测试用户是否有Tablet PC,但无法检查Windows 10本身是否处于平板电脑模式。当我解耦我的键盘时,我的电脑问我是否要切换到平板电脑模式,我总是单击否。这是我的问题中的代码无法满足我的需求的地方。 –

+0

编辑答案,让我知道GetSystemMetrics(SM_CONVERTIBLESLATEMODE)在平板电脑模式下和非平板电脑模式下返回的内容。 – SP1062

相关问题