2017-03-30 8 views
10

次のコードを使用して、ユーザーがタブレットモードであるかどうかを検出しています。私はSurface Proを使用しており、キーボードをデカップリングしてPCをタブレットにすると、IsTabletModeがtrueを返します。デカップリングなしで「タブレットモード」ボタンを使用すると、常に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はタブレットモードでキーボードを検出し、キーボードは接続されていますか? (私はこれをチェックすることはできません)そうであれば、キーボードの存在に基づいてロジックを追加することができます。 –

+0

タブレットモードでは、PCはキーボードを検出しません。私はキーボードが存在するかどうかを検出するために探していない、私はウィンドウ "タブレット"のテーマと私のアプリケーションのテーマを一致させるために探しています。あなたはもっと大きなボタンなどを知っています。キーボードの存在はこれに関係しません。 –

+0

リンクした回答の質問に「解決策」を掲載しましたか? – Brunner

答えて

1

編集2: SM_TABLETPCが唯一のWindows XPタブレットPC EditionおよびWindows Vistaではサポートされています。 ここでのWindows 10への参照があるように思えません: GetSystemMetrics関数(SM_CONVERTIBLESLATEMODE):あなたがこれを使用することができますhttps://msdn.microsoft.com/en-us/library/windows/desktop/ms700675(v=vs.85).aspx

。 「0」が返された場合は、タブレットモードであることを意味します。 "1"が返された場合は、非タブレットモードであることを示します。

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

編集: https://software.intel.com/en-us/articles/how-to-write-a-2-in-1-aware-application

あなたはこれでQueryTabletMode方法を置き換えることができます あなたがPCのタブレットモードが

+0

@ SP1026、ご返信ありがとうございます。残念ながら、私たちはこの機能を廃止しました。しかし、ここでは問題を解決できませんでした。問題は、Windows 10では、画面の右下にあるアクションペインを使用してタブレットモードに切り替えることができるということです。これは、PCがタッチをサポートしている限り、キーボードが接続されていても、いつでもタブレットモードに切り替えることができることを意味します。私は、タッチをサポートする能力に関係なく、キーボードが取り付けられているか、または他のバリエーションであっても、PCがタブレットモードに切り替わったことを検出する方法を探していました。 –

+0

私の質問のコードは、ユーザーがTablet PCを持っているかどうかをテストしますが、Windows 10自体がタブレットモードであるかどうかを確認することはできません。キーボードを切り離すと、タブレットモードに切り替えるかどうか尋ねられます。私はいつもnoをクリックします。これは私の質問のコードが私のニーズを満たすことができない場所です。 –

+0

答えを編集し、タブレットモードで、タブレットモードでないときにGetSystemMetrics(SM_CONVERTIBLESLATEMODE)が返すものを教えてください。 – SP1062

関連する問題