次のコードを使用して、ユーザーがタブレットモードであるかどうかを検出しています。私は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;
}
}
んオンになったかどうかを確認するために何のイベントがないよう定期的にこれを確認する必要があるかもしれませんPCはタブレットモードでキーボードを検出し、キーボードは接続されていますか? (私はこれをチェックすることはできません)そうであれば、キーボードの存在に基づいてロジックを追加することができます。 –
タブレットモードでは、PCはキーボードを検出しません。私はキーボードが存在するかどうかを検出するために探していない、私はウィンドウ "タブレット"のテーマと私のアプリケーションのテーマを一致させるために探しています。あなたはもっと大きなボタンなどを知っています。キーボードの存在はこれに関係しません。 –
リンクした回答の質問に「解決策」を掲載しましたか? – Brunner