2017-03-30 7 views
10

Ich verwende den folgenden Code, um festzustellen, ob sich ein Benutzer im Tablet-Modus befindet oder nicht. Ich bin auf einem Surface Pro und wenn ich die Tastatur entkoppeln und den PC zu einem Tablet machen, gibt IsTabletMode True zurück (was es sollte.) Wenn ich die "Tablet Mode" -Taste ohne Entkopplung des Bildschirms verwende, gibt IsTabletMode immer false zurück. Hat jemand das erlebt und wie kann ich es lösen?So erkennen Sie den Tablettmodus

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

Does gedreht wurde erkennt der PC die Tastatur im Tablet-Modus und die Tastatur ist angeschlossen? (Ich kann das nicht überprüfen.) Wenn dies der Fall ist, sollten Sie in der Lage sein, Logik basierend auf dem Vorhandensein einer Tastatur hinzuzufügen. –

+0

Der PC erkennt die Tastatur im Tablet-Modus. Ich suche nicht, ob eine Tastatur existiert oder nicht, ich suche das Thema meiner Anwendung mit dem Windows "Tablet" Thema. Sie kennen größere Tasten usw. Das Vorhandensein einer Tastatur hat damit nichts zu tun. –

+0

Haben Sie versucht, die "Lösung" in der Frage der Antwort, die Sie verknüpft haben, zu veröffentlichen? – Brunner

Antwort

1

Edit 2: The SM_TABLETPC wird nur von Windows XP Tablet PC Edition und Windows Vista unterstützt. Es scheint nicht jede Bezugnahme auf Windows 10, hier zu sein: https://msdn.microsoft.com/en-us/library/windows/desktop/ms700675(v=vs.85).aspx

Sie diese verwenden können: GetSystemMetrics (SM_CONVERTIBLESLATEMODE). Eine "0" bedeutet, dass es sich im Tablet-Modus befindet. Eine "1" bedeutet, dass es sich nicht im Tablet-Modus befindet. https://software.intel.com/en-us/articles/how-to-write-a-2-in-1-aware-application

Können Sie die QueryTabletMode Methode mit diesem ersetzen:

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

Edit: Sie könnten dies regelmäßig überprüfen müssen, da es kein Ereignis ist, wenn der Tablet-Modus des PC zu sehen, auf

+0

@ SP1026, danke für Ihre Antwort. Leider haben wir diese Funktion verschrottet. Wir haben das Problem hier jedoch nie gelöst. Das Problem besteht darin, dass Windows 10 es Benutzern ermöglicht, über den Aktionsbereich unten rechts auf dem Bildschirm in den Tablet-Modus zu wechseln. Solange der PC Berührungen unterstützt, kann der Benutzer jederzeit in den Tablet-Modus wechseln, auch wenn er eine Tastatur angeschlossen hat. Ich suchte nach einer Möglichkeit, festzustellen, dass der PC in den Tablet-Modus gewechselt hat, unabhängig davon, ob er Berührungen unterstützt, eine Tastatur angeschlossen hat oder eine andere Variante. –

+0

Der Code in meiner Frage wird erfolgreich getestet, wenn der Benutzer über einen Tablet PC verfügt, überprüft jedoch nicht, ob sich Windows 10 selbst im Tablet-Modus befindet. Wenn ich meine Tastatur entkopple, fragt mein PC, ob ich zum Tablet-Modus wechseln möchte, ich klicke immer auf Nein. Dies ist, wo der Code in meiner Frage nicht meine Bedürfnisse erfüllt. –

+0

Beantwortete die Antwort, lassen Sie mich wissen, was die GetSystemMetrics (SM_CONVERTIBLESLATEMODE) zurückgibt, wenn im Tablet-Modus und wenn nicht im Tablet-Modus. – SP1062

Verwandte Themen