天天看點

C# 擷取目前螢幕的寬高和位置

上一篇部落格《 C# 擷取目前螢幕DPI

》,介紹了如何擷取目前螢幕的DPI設定

本章主要介紹如何擷取目前視窗所在螢幕的資訊

目前螢幕資訊

如果目前是單螢幕,可以直接擷取主螢幕

var primaryScreen = Screen.PrimaryScreen;      

如果目前是多屏,建議通過視窗句柄擷取Screen資訊

var window = Window.GetWindow(ExportButton);//擷取目前主視窗
    var intPtr = new WindowInteropHelper(window).Handle;//擷取目前視窗的句柄
    var screen = Screen.FromHandle(intPtr);//擷取目前螢幕      

擷取螢幕高寬/位置

DpiPercent

DPI轉換比例常量,DpiPercent = 96;

為何DpiPercent為96 ?有一個概念“裝置無關機關尺寸”,其大小為1/96英寸。比如:

【實體機關尺寸】=1/96英寸 * 96dpi = 1像素;

【實體機關尺寸】=1/96英寸 * 120dpi = 1.25像素;

關于WPF機關和系統DPI,可以參考

《WPF程式設計寶典》中相關章節

Screen.Bounds

Bounds對應的是螢幕的分辨率,而要通過Bounds.Width擷取螢幕的寬度,則需要将其轉化為WPF機關的高寬。

步驟:

  1. 擷取目前螢幕的實體尺寸(X/Y方向的像素)--如X方向 currentGraphics.DpiX / DpiPercent
  2. 将Screen.Bounds的資訊轉化為WPF機關資訊 --如高度 screen.Bounds.Width / dpiXRatio
using (Graphics currentGraphics = Graphics.FromHwnd(intPtr))
    {
        double dpiXRatio = currentGraphics.DpiX / DpiPercent;
        double dpiYRatio = currentGraphics.DpiY / DpiPercent;
        var width = screen.Bounds.Width / dpiXRatio;
        var height = screen.Bounds.Height / dpiYRatio;
        var left = screen.Bounds.Left / dpiXRatio;
        var top = screen.Bounds.Top / dpiYRatio;
    }      

直接擷取螢幕的高寬

也可以通過System.Windows.SystemParameters,直接擷取主螢幕資訊,不過這個類隻能擷取主螢幕的高寬。

這裡的高寬指的是實際高寬。

主螢幕:

var screenHeight = SystemParameters.PrimaryScreenHeight;
    var screenWidth = SystemParameters.PrimaryScreenWidth;      

多屏時全螢幕:

var primaryScreenHeight = SystemParameters.FullPrimaryScreenHeight;
    var primaryScreenWidth = SystemParameters.FullPrimaryScreenWidth;      

目前工作區域:(除去工作列的區域)

var workAreaWidth = SystemParameters.WorkArea.Size.Width;
    var workAreaHeight = SystemParameters.WorkArea.Size.Height;      

關鍵字:WPF機關,螢幕高寬/位置

作者:

唐宋元明清2188

出處:

http://www.cnblogs.com/kybs0/

本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須在文章頁面給出原文連接配接,否則保留追究法律責任的權利。