2017-03-30 77 views
10

Bir kullanıcının tablet modunda olup olmadığını algılamak için aşağıdaki kodu kullanıyorum. Bir Surface Pro'dayım ve klavyeyi çözüp PC'ye bir tablet hazırladığımda, IsTabletMode doğru döndürür (ki bu da gerekir.) Ekranı ayırmadan "Tablet Mode" düğmesini kullandığımda, IsTabletMode her zaman false değerini döndürür. Bunu yaşayan var mı ve nasıl çözebilirim?Tablet modu nasıl algılanır

/* 
* 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 etkinleştirilmiş olması halinde görmek için hiçbir olay yoktur periyodik olarak bu kontrol etmek gerekebilir PC klavyeyi tablet modundayken ve klavye takılıyken algılar mı? (Bunu kontrol edemiyorum.) Eğer öyleyse, bir klavye varlığına dayalı mantık ekleyebilmeniz gerekir. –

+0

PC, tablet modundayken klavyeyi algılar. Bir klavye olup olmadığını algılamaya çalışmıyorum, uygulamamın temasını Windows "tablet" temasıyla eşleştirmeye çalışıyorum. Daha büyük düğmeler vb. Bilirsiniz. Bir klavyenin varlığının bunun üzerinde bir etkisi yoktur. –

+0

Bağladığınız cevap sorusunda yayınlanan "çözüm" ü denediniz mi? – Brunner

cevap

1

düzenle 2: SM_TABLETPC yalnızca Windows XP Tablet PC Edition ve Windows Vista tarafından desteklenmektedir. burayı, Windows 10 için herhangi bir referans olarak görünmüyor: GetSystemMetrics (SM_CONVERTIBLESLATEMODE): Bu kullanabilirsiniz https://msdn.microsoft.com/en-us/library/windows/desktop/ms700675(v=vs.85).aspx

. İade edilen “0”, tablet modunda olduğu anlamına gelir. İade edilen “1”, tablet dışı modda olduğu anlamına gelir.

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

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

Bu konuda QueryTabletMode yöntemini değiştirebilir miyim Sen PC'nin tablet modu

+0

, Yanıtınız için teşekkür ederim. Ne yazık ki, bu özelliği bir kenara bıraktık. Ancak, buradaki sorunu hiç çözmedik. Sorun, Windows 10'un, kullanıcıların ekranın sağ alt kısmındaki hareketler bölmesini kullanarak tablet moduna geçmelerine izin vermesidir. Bu, PC'nin desteklediği sürece, kullanıcının klavye takılı olsa bile, herhangi bir zamanda tablet moduna geçebileceği anlamına gelir. Dokunun dokunma kabiliyetine, klavyenin takılı olmasına veya başka bir varyasyona sahip olmasına bakılmaksızın, bilgisayarın Tablet moduna geçtiğini tespit etmenin bir yolunu arıyordum. Kullanıcı bir Tablet PC vardır, ancak Windows 10 kendisi tablet modunda olup olmadığını kontrol etmek başarısız olursa –

+0

benim söz konusu kodu başarıyla test etmek yok. Klavyemi deşifre ettiğimde, bilgisayarım Tablet Mod'a geçmek isteyip istemediğimi sorar. Sorduğum sorudaki kodun ihtiyaçlarımı karşılayamadığı yer burası. –

+0

Yanıtı düzenledikten sonra, tablet modunda ve tablet modundayken GetSystemMetrics (SM_CONVERTIBLESLATEMODE) öğesinin ne döndüğünü bana bildirin. – SP1062

İlgili konular