首页 > 编程语言 >c# 获取系统dpi

c# 获取系统dpi

时间:2023-03-25 16:12:54浏览次数:33  
标签:IntPtr c# 获取 int hdc currentGraphics dpi

c# 获取系统dpi

正在搜索: c# 获取系统dpi
正在为你生成答案…

您可以使用以下代码获取当前屏幕的DPI:

Graphics currentGraphics = Graphics.FromHwnd(new WindowInteropHelper(mainWindow).Handle);
double dpixRatio = currentGraphics.DpiX / 96;

其中,mainWindow是您的窗口对象。

如果是在命令行程序中获取呢,命令行程序中不存在mainWindow

如果是在命令行程序中获取,您可以使用以下代码:

Graphics currentGraphics = Graphics.FromHwnd(IntPtr.Zero);
double dpixRatio = currentGraphics.DpiX / 96;

其中,IntPtr.Zero表示当前屏幕的句柄。

根据我的测试,在不同程序中此方法将返回不同的值,如何永远返回系统的dpi呢?

如果您想要获取系统的DPI,可以使用以下代码:

[DllImport("gdi32.dll")]
static extern int GetDeviceCaps(IntPtr hdc, int nIndex);

[DllImport("user32.dll")]
static extern IntPtr GetDC(IntPtr hWnd);

[DllImport("user32.dll")]
static extern int ReleaseDC(IntPtr hWnd, IntPtr hDC);

const int LOGPIXELSX = 88;
const int LOGPIXELSY = 90;

IntPtr hdc = GetDC(IntPtr.Zero);
int dpiX = GetDeviceCaps(hdc, LOGPIXELSX);
int dpiY = GetDeviceCaps(hdc, LOGPIXELSY);
ReleaseDC(IntPtr.Zero, hdc);
double dpixRatio = dpiX / 96.0;

其中,LOGPIXELSX和LOGPIXELSY是常量,分别代表水平和垂直方向的DPI。

标签:IntPtr,c#,获取,int,hdc,currentGraphics,dpi
From: https://www.cnblogs.com/trykle/p/17254932.html

相关文章

  • linux c++编译
                gcc-v查看版本                     指定名字    多文件编译 ......
  • c++的内存补齐
    数据类型占用的字节数:char1short2int4longlong8当我们需要进行内存补齐的时候,是看最大类型然后进行补齐。structtest{shorta;shortb;c......
  • Rancher 系列文章-在腾讯云的 K3S 上安装高可用 Rancher 集群
    开篇......
  • Cesium 与 Babylon.js 可视化 glsl 特效篇(十八)
    我决定不从Babylonjs基础来讲了直接整合cesium与babylonjs可视化来讲我整合一个类库后续不断更新中npmi@haibalai/cesium-babylonjs初始化cesium-babylonjs类库,map......
  • DC-8(sql注入漏洞)
    信息收集扫描ip和端口:通过nmap扫描ip和端口发现:ip为192.168.6.152,开放端口号为80和22扫描目录:dirb和desearch,发现了疑似登录界面查看框架:Drupal7漏洞扫描:searchsploitDru......
  • 为什么要限制Redis Cluster集群规模
    RedisCluster能保存的数据量以及支撑的吞吐量,跟集群的实例规模密切相关。Redis官方给出了RedisCluster的规模上限,就是一个集群运行1000个实例。这里限制集群规模的......
  • 【C++】类与对象理解和学习(中)
    六大默认成员函数前言每个类中都含有六大默认成员函数,也就是说,即使这个类是个空类,里面什么都没有写,但是编译器依然会自动生成六个默认成员函数,可以说它们六个是祖师爷钦点的......
  • How to log in when using gin's non-separated front-end and back-end systems
    Person:Howtologinwhenusinggin'snon-separatedfront-endandback-endsystems?ChatGPT:WhenusingGinastheback-endsystemandanon-separatedfron......
  • modbus CRC校验源码转载
     c#CRC校验 用于学习记录原文载自:https://www.cnblogs.com/ayxj/p/11481969.html用C#实现的几种常用数据校验方法整理(CRC校验;LRC校验;BCC校验;累加和校验)   ......
  • centos7安装Docker(转)
    原文:https://cloud.tencent.com/developer/article/17014511、安装前必读在安装Docker之前,先说一下配置,我这里是Centos7Linux内核:官方建议3.10以上,3.8以上貌似也可......