2013-03-07 41 views
16

Tôi đã ổn với Screen.PrimaryScreen.Bounds.Size một thời gian, nhưng trên máy tính Windows7 của tôi được gắn vào TV màn hình lớn của tôi, nó cho tôi giá trị không chính xác.Các vấn đề với PrimaryScreen.Size

Tôi đã đọc ở nơi khác để thử SystemInformation.PrimaryMonitorSize nhưng điều đó mang lại cùng giá trị.

Khi tôi nhấp chuột phải vào màn hình để có Độ phân giải màn hình, nó cho biết 1920x1080. Hai điều trên cho tôi 1280x720.

Tôi cũng đã thử các phiên bản WPF:

var w = System.Windows.SystemParameters.PrimaryScreenWidth; 
var h = System.Windows.SystemParameters.PrimaryScreenHeight; 
MessageBox.Show(new Size((int)w, (int)h).ToString()); 

Kích thước màn hình đã được thay đổi thông qua (kích chuột phải vào desktop) Personalize > Desktop tùy chọn là 150% (vì màn hình là 60" và bạn ngồi loại xa)

Làm thế nào để phát hiện này để của giá trị trả về từ trên có thể được điều chỉnh

Note:.? tôi đã khám phá làm thế nào để làm được việc này với một nhấn chuột phải và thực thi điều chỉnh tương thích để vô hiệu hóa DPI ảo hóa, nhưng tôi vẫn cần một giải pháp programatic vì vậy tôi không cần phải có người sử dụng của điều chỉnh này bản thân: Xem - http://msdn.microsoft.com/en-us/library/dd464660(VS.85).aspx#dpi_virtualization

+0

Máy tính (máy tính xách tay?) Có được kết nối với TV được đặt thành 1280 x 720 không? Tôi đã có một máy tính xách tay với độ phân giải tối đa khoảng 1320 x 900 ... –

+0

@Grant Ý của bạn là gì? Độ phân giải màn hình là '1920x1080', không có màn hình phụ. Máy tính không phải là máy tính xách tay. –

+0

Ah, được rồi, chỉ cần đọc nó. Tôi cho rằng bạn có một máy tính xách tay win7 sử dụng TV như một màn hình phụ. –

Trả lời

2

Tôi không cảm thấy đây là một câu hỏi trùng lặp, nhưng câu trả lời là giống như trên thread khác: https://stackoverflow.com/a/13228495/353147 Như câu hỏi không phải là phông chữ mờ nhưng tại sao Screen.PrimaryScreen.Bounds.Size trả về thông tin bị lỗi. Nó có thể giúp người khác.

Tôi đã chạy vào một thông báo lỗi, rằng mscorlib đã ném một lỗi null. Từ chủ đề này http://forums.asp.net/t/1653876.aspx/1 Tôi đã có thể phát hiện ra rằng việc bỏ chọn "Bật cài đặt bảo mật ClickOnce" đã khắc phục sự cố đó. Điều này có vẻ như một hack, nhưng nó hoạt động.

5

Nó có thể là thiết lập Dpi của bạn trong cửa sổ thiết lập trên 100%

Hãy thử sử dụng phương pháp này, điều này sẽ mở rộng các giải pháp cho các hệ thống hiện tại Dpi cài đặt

Winforms:

private Size GetDpiSafeResolution() 
{ 
    using (Graphics graphics = this.CreateGraphics()) 
    { 
     return new Size((Screen.PrimaryScreen.Bounds.Width * (int)graphics.DpiX)/96 
      , (Screen.PrimaryScreen.Bounds.Height * (int)graphics.DpiY)/96); 
    } 
} 

WPF:

private Size GetDpiSafeResolution() 
{ 
    PresentationSource _presentationSource = PresentationSource.FromVisual(Application.Current.MainWindow); 
    Matrix matix = _presentationSource.CompositionTarget.TransformToDevice; 
    return new Size(SystemParameters.PrimaryScreenHeight * matix.M11, SystemParameters.PrimaryScreenWidth * matix.M22); 
} 

Lưu ý: Hãy chắc chắn rằng MainWindow của bạn được nạp trước khi chạy mã này

+0

Đây là ứng dụng winforms, vì vậy tôi gặp sự cố khi đăng ký Application.Current –

+0

xin lỗi Tôi nghĩ rằng đó là wpf: ( –

+0

Cập nhật câu trả lời của tôi với phiên bản Winforms (chưa được kiểm tra). Nhưng ý tưởng tương tự của nó, bạn cần phải tìm các thiết lập Dpi và mutiply kích thước bởi rằng –