2017-03-30 15 views
10

Tôi đang sử dụng mã sau để phát hiện xem người dùng có ở chế độ máy tính bảng hay không. Tôi đang ở trên Surface Pro và khi tôi tách bàn phím và biến PC thành máy tính bảng, IsTabletMode trả về giá trị true (khi cần.) Khi tôi sử dụng nút "Chế độ máy tính bảng" mà không tách màn hình, IsTabletMode luôn trả về giá trị sai. Có ai có kinh nghiệm này không và tôi có thể giải quyết nó như thế nào?Cách phát hiện chế độ máy tính bảng

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

Liệu PC phát hiện bàn phím khi ở chế độ máy tính bảng và bàn phím được gắn vào? (Tôi không thể kiểm tra điều này.) Nếu vậy, bạn sẽ có thể thêm logic dựa trên sự hiện diện của bàn phím. –

+0

PC không phát hiện bàn phím khi ở chế độ máy tính bảng. Tôi không tìm cách phát hiện xem bàn phím có tồn tại hay không, tôi đang tìm kiếm để phù hợp với chủ đề của ứng dụng của tôi với chủ đề "máy tính bảng" cửa sổ. Bạn biết các nút lớn hơn, v.v. Sự tồn tại của bàn phím không mang về điều này. –

+0

Bạn đã thử "giải pháp" được đăng trong câu hỏi của câu trả lời bạn đã liên kết chưa? – Brunner

Trả lời

1

Chỉnh sửa 2: SM_TABLETPC chỉ được Windows XP Tablet PC Edition và Windows Vista hỗ trợ. Dường như không có bất kỳ tham chiếu nào đến Windows 10 ở đây: https://msdn.microsoft.com/en-us/library/windows/desktop/ms700675(v=vs.85).aspx

Bạn có thể sử dụng điều này: GetSystemMetrics (SM_CONVERTIBLESLATEMODE). Một “0” trả về có nghĩa là nó đang ở chế độ máy tính bảng. Một "1" trả lại có nghĩa là nó đang ở chế độ không phải máy tính bảng. https://software.intel.com/en-us/articles/how-to-write-a-2-in-1-aware-application

Bạn có thể thay thế các phương pháp QueryTabletMode với điều này:

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

Edit: Bạn có thể cần phải kiểm tra này định kỳ như không có sự kiện để xem nếu chế độ tablet của máy tính đã được bật

+0

@ SP1026, cảm ơn bạn đã trả lời. Thật không may, chúng tôi đã loại bỏ tính năng này. Tuy nhiên, chúng tôi chưa bao giờ giải quyết vấn đề ở đây. Vấn đề là Windows 10 cho phép người dùng chuyển sang chế độ máy tính bảng bằng cách sử dụng ngăn tác vụ ở dưới cùng bên phải của màn hình. Điều này có nghĩa là miễn là máy tính hỗ trợ chạm, người dùng có thể chuyển sang chế độ máy tính bảng bất kỳ lúc nào, ngay cả khi họ có bàn phím được gắn vào. Tôi đang tìm kiếm một cách để phát hiện rằng PC đã chuyển sang chế độ Tablet, bất kể khả năng hỗ trợ chạm, có gắn bàn phím hay bất kỳ biến thể nào khác. –

+0

Mã trong câu hỏi của tôi kiểm tra thành công nếu người dùng có Tablet PC, nhưng không thể kiểm tra xem Windows 10 có đang ở chế độ máy tính bảng hay không. Khi tôi decouple bàn phím của tôi, máy tính của tôi hỏi tôi nếu tôi muốn chuyển sang chế độ máy tính bảng, tôi luôn luôn bấm không. Đây là nơi mã trong câu hỏi của tôi không đáp ứng được nhu cầu của tôi. –

+0

Đã chỉnh sửa câu trả lời, cho tôi biết GetSystemMetrics (SM_CONVERTIBLESLATEMODE) trả về gì khi ở chế độ máy tính bảng và khi không ở chế độ máy tính bảng. – SP1062

Các vấn đề liên quan