2017-03-30 7 views
10

मैं यह पता लगाने के लिए निम्न कोड का उपयोग कर रहा हूं कि कोई उपयोगकर्ता टेबलेट मोड में है या नहीं। मैं एक भूतल प्रो पर हूं और जब मैं कीबोर्ड को डीक्यूपल करता हूं और पीसी को टैबलेट में बना देता हूं, IsTabletMode सत्य देता है (जो इसे करना चाहिए।) जब मैं स्क्रीन को डीकॉप्लिंग किए बिना "टैबलेट मोड" बटन का उपयोग करता हूं, तो IsTabletMode हमेशा झूठा रिटर्न देता है। क्या किसी ने इसका अनुभव किया है और मैं इसे कैसे हल कर सकता हूं?टैबलेट मोड का पता कैसे लगाएं

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

करता बदल गया था समय-समय पर इस जांच करने के लिए आवश्यकता हो सकती है पीसी टैबलेट मोड में कीबोर्ड का पता लगाता है और कीबोर्ड संलग्न है? (मैं इसे जांच नहीं सकता।) यदि ऐसा है, तो आप कीबोर्ड की उपस्थिति के आधार पर तर्क जोड़ने में सक्षम होना चाहिए। –

+0

पीसी टैबलेट मोड में कीबोर्ड का पता लगाता है। मैं यह पता लगाने की तलाश नहीं कर रहा हूं कि कोई कीबोर्ड मौजूद है या नहीं, मैं विंडोज़ "टैबलेट" थीम के साथ अपने एप्लिकेशन के विषय से मेल खाता हूं। आप बड़े बटन, आदि जानते हैं। कीबोर्ड के अस्तित्व पर इसका कोई असर नहीं है। –

+0

क्या आपने जो जवाब दिया है उसके प्रश्न में पोस्ट किए गए "समाधान" को आजमाया है? की – Brunner

उत्तर

1

संपादित करें 2: SM_TABLETPC केवल Windows XP टेबलेट पीसी संस्करण और Windows Vista द्वारा समर्थित है। वहाँ Windows 10 यहाँ के लिए किसी भी संदर्भ होना प्रतीत नहीं होता है: https://msdn.microsoft.com/en-us/library/windows/desktop/ms700675(v=vs.85).aspx

आप इस का उपयोग कर सकते हैं: GetSystemMetrics (SM_CONVERTIBLESLATEMODE)। एक "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 विधि की जगह ले सकता आप के रूप में वहाँ कोई घटना है देखने के लिए अगर पीसी टैबलेट मोड पर

+0

@ एसपी 1026, आपकी प्रतिक्रिया के लिए धन्यवाद। दुर्भाग्यवश, हमने इस सुविधा को तोड़ दिया। हालांकि, हमने यहां इस मुद्दे को कभी हल नहीं किया है। समस्या यह है कि विंडोज 10 उपयोगकर्ताओं को स्क्रीन के निचले दाएं भाग में क्रिया फलक का उपयोग करके टेबलेट मोड पर स्विच करने की अनुमति देता है। इसका मतलब यह है कि जब तक पीसी छूता का समर्थन करता है, उपयोगकर्ता किसी भी समय गोली मोड में स्विच कर सकते हैं, भले ही वे एक कुंजीपटल संलग्न थी। मैं पता लगाने के लिए कि पीसी टैबलेट मोड को अपना लिया था, छूता का समर्थन करने की क्षमता की परवाह किए बिना एक तरह से लिए देख रहा था, एक कुंजीपटल संलग्न, या किसी अन्य परिवर्तन होता है। –

+0

मेरे प्रश्न में कोड सफलतापूर्वक परीक्षण करता है यदि उपयोगकर्ता के पास टैबलेट पीसी है, लेकिन यह जांचने में विफल रहता है कि विंडोज 10 स्वयं टैबलेट मोड में है या नहीं। जब मैं अपना कीबोर्ड डिकूपल करता हूं, तो मेरा पीसी मुझसे पूछता है कि क्या मैं टैबलेट मोड पर स्विच करना चाहता हूं, मैं हमेशा नहीं क्लिक करता हूं। यह वह जगह है जहां मेरे प्रश्न का कोड मेरी आवश्यकताओं को पूरा करने में विफल रहता है। –

+0

जवाब संपादित, मुझे पता है GetSystemMetrics (SM_CONVERTIBLESLATEMODE) क्या लौटाता है जब टैबलेट मोड में है और जब टैबलेट मोड में नहीं है। – SP1062

संबंधित मुद्दे