【C#】获取电脑DPI
public static class DPIGeter
{
/// <summary>
/// 获取DPI
/// </summary>
/// <param name="dpix"></param>
/// <param name="dpiy"></param>
public static void GetDPI(ref float dpix, ref float dpiy)
{
SetProcessDPIAware();//此处会忽视系统DWM虚拟化,不建议使用
IntPtr screenDC = GetDC(IntPtr.Zero);
dpix = GetDeviceCaps(screenDC, LOGPIXELSX);
dpiy = GetDeviceCaps(screenDC, LOGPIXELSY);
ReleaseDC(IntPtr.Zero, screenDC);
}
/// <summary>
/// 获取DPI缩放比例
/// </summary>
/// <param name="dpiscalex"></param>
/// <param name="dpiscaley"></param>
public static void GetDPIScale(ref float dpiscalex, ref float dpiscaley)
{
int x = GetSystemMetrics(SM_CXSCREEN);
int y = GetSystemMetrics(SM_CYSCREEN);
IntPtr hdc = GetDC(IntPtr.Zero);
int w = GetDeviceCaps(hdc, DESKTOPHORZRES);
int h = GetDeviceCaps(hdc, DESKTOPVERTRES);
ReleaseDC(IntPtr.Zero, hdc);
dpiscalex = (float)w / x;
dpiscaley = (float)h / y;
}
[DllImport("user32.dll")]
static extern IntPtr GetDC(IntPtr ptr); [DllImport("user32.dll", EntryPoint = "ReleaseDC")]
public static extern IntPtr ReleaseDC(IntPtr hWnd, IntPtr hDc); [DllImport("gdi32.dll")]
public static extern IntPtr CreateDC(
string lpszDriver, // driver name
string lpszDevice, // device name
string lpszOutput, // not used; should be NULL
Int64 lpInitData // optional printer data
); [DllImport("gdi32.dll")]
public static extern int GetDeviceCaps(
IntPtr hdc, // handle to DC
int nIndex // index of capability
); [DllImport("user32.dll")]
internal static extern bool SetProcessDPIAware(); [DllImport("user32")]
public static extern int GetSystemMetrics(
int nIndex
); [DllImport("user32.dll", EntryPoint = "GetDesktopWindow", CharSet = CharSet.Auto, SetLastError = true)]
public static extern IntPtr GetDesktopWindow(); [DllImport("user32.dll")]
public static extern int GetWindowRect(IntPtr hwnd, out Rect lpRect); public struct Rect
{
public int Left;
public int Top;
public int Right;
public int Bottom;
} const int DRIVERVERSION = ;
const int TECHNOLOGY = ;
const int HORZSIZE = ;
const int VERTSIZE = ;
const int HORZRES = ;
const int VERTRES = ;
const int BITSPIXEL = ;
const int PLANES = ;
const int NUMBRUSHES = ;
const int NUMPENS = ;
const int NUMMARKERS = ;
const int NUMFONTS = ;
const int NUMCOLORS = ;
const int PDEVICESIZE = ;
const int CURVECAPS = ;
const int LINECAPS = ;
const int POLYGONALCAPS = ;
const int TEXTCAPS = ;
const int CLIPCAPS = ;
const int RASTERCAPS = ;
const int ASPECTX = ;
const int ASPECTY = ;
const int ASPECTXY = ;
const int SHADEBLENDCAPS = ;
const int LOGPIXELSX = ;
const int LOGPIXELSY = ;
const int SIZEPALETTE = ;
const int NUMRESERVED = ;
const int COLORRES = ;
const int PHYSICALWIDTH = ;
const int PHYSICALHEIGHT = ;
const int PHYSICALOFFSETX = ;
const int PHYSICALOFFSETY = ;
const int SCALINGFACTORX = ;
const int SCALINGFACTORY = ;
const int VREFRESH = ;
const int DESKTOPVERTRES = ;
const int DESKTOPHORZRES = ;
const int BLTALIGNMENT = ;
const int SM_CXSCREEN = ;//'屏幕宽度
const int SM_CYSCREEN = ;//'屏幕高度
const int SM_CXVSCROLL = ;//'垂直滚动条的宽度
const int SM_CYHSCROLL = ;//'水平滚动条的宽度
const int SM_CYCAPTION = ;//'Height of windows caption 实际标题高度加上SM_CYBORDER
const int SM_CXBORDER = ;//'Width of no-sizable borders 无法测量的窗口框架宽度
const int SM_CYBORDER = ;// 'Height of non-sizable borders 无法测量的窗口框架高度
const int SM_CXDLGFRAME = ;// 'Width of dialog box borders
const int SM_CYDLGFRAME = ;//'Height of dialog box borders
const int SM_CYHTHUMB = ;//'Height of scroll box on horizontal scroll bar 水平滚动条上滑块的高度
const int SM_CXHTHUMB = ;//' Width of scroll box on horizontal scroll bar 水平滚动条上滑块的宽度
const int SM_CXICON = ;// 'Width of standard icon 图标宽度
const int SM_CYICON = ;//'Height of standard icon 图标高度
const int SM_CXCURSOR = ;//'Width of standard cursor 光标宽度
const int SM_CYCURSOR = ;//'Height of standard cursor 光标高度
const int SM_CYMENU = ;// 'Height of menu 以像素计算的单个菜单条的高度
const int SM_CXFULLSCREEN = ;// 'Width of client area of maximized window
const int SM_CYFULLSCREEN = ;// 'Height of client area of maximized window
const int SM_CYKANJIWINDOW = ;//'Height of Kanji window
const int SM_MOUSEPRESENT = ;//'True is a mouse is present 如果为TRUE或不为0的值则安装了鼠标,否则没有安装。
const int SM_CYVSCROLL = ;//'Height of arrow in vertical scroll bar
const int SM_CXHSCROLL = ;//'Width of arrow in vertical scroll bar
const int SM_DEBUG = ;//'True if deugging version of windows is running
const int SM_SWAPBUTTON = ;//'True if left and right buttons are swapped.
const int SM_CXMIN = ;// 'Minimum width of window
const int SM_CYMIN = ;//'Minimum height of window
const int SM_CXSIZE = ;//'Width of title bar bitmaps
const int SM_CYSIZE = ;//'height of title bar bitmaps
const int SM_CXMINTRACK = ;// 'Minimum tracking width of window
const int SM_CYMINTRACK = ;//'Minimum tracking height of window
const int SM_CXDOUBLECLK = ;// 'double click width
const int SM_CYDOUBLECLK = ;// 'double click height
const int SM_CXICONSPACING = ;//'width between desktop icons
const int SM_CYICONSPACING = ;//'height between desktop icons
const int SM_MENUDROPALIGNMENT = ;//'Zero if popup menus are aligned to the left of the memu bar item. True if it is aligned to the right.
const int SM_PENWINDOWS = ;// 'The handle of the pen windows DLL if loaded.
const int SM_DBCSENABLED = ;// 'True if double byte characteds are enabled
const int SM_CMOUSEBUTTONS = ;//'Number of mouse buttons.
const int SM_CMETRICS = ;// 'Number of system metrics
const int SM_CLEANBOOT = ;//'Windows 95 boot mode. 0 = normal, 1 = safe, 2 = safe with network
const int SM_CXMAXIMIZED = ;//'default width of win95 maximised window
const int SM_CXMAXTRACK = ;// 'maximum width when resizing win95 windows
const int SM_CXMENUCHECK = ;// 'width of menu checkmark bitmap
const int SM_CXMENUSIZE = ;//'width of button on menu bar
const int SM_CXMINIMIZED = ;// 'width of rectangle into which minimised windows must fit.
const int SM_CYMAXIMIZED = ;//'default height of win95 maximised window
const int SM_CYMAXTRACK = ;//'maximum width when resizing win95 windows
const int SM_CYMENUCHECK = ;//'height of menu checkmark bitmap
const int SM_CYMENUSIZE = ;//'height of button on menu bar
const int SM_CYMINIMIZED = ;// 'height of rectangle into which minimised windows must fit.
const int SM_CYSMCAPTION = ;// 'height of windows 95 small caption
const int SM_MIDEASTENABLED = ;// 'Hebrw and Arabic enabled for windows 95
const int SM_NETWORK = ;//'bit o is set if a network is present.
const int SM_SECURE = ;//'True if security is present on windows 95 system
const int SM_SLOWMACHINE = ;// 'true if machine is too slow to run win95.
}
typedef enum _Process_DPI_Awareness {
Process_DPI_Unaware = 0,
Process_System_DPI_Aware = 1,
Process_Per_Monitor_DPI_Aware = 2
} Process_DPI_Awareness;
【C#】获取电脑DPI的更多相关文章
- C#/VB.NET 获取电脑属性(硬盘ID、硬盘容量、Cpu序列号、MAC地址、系统类型)
在开发过程中,经常需要获取电脑的一些属性,如获取硬盘ID/CPU序列号/MAC地址作为来加密字符串. 1.硬盘 在我查看网上一些文档时,发现很多人对硬盘序列号很模糊~ 什么叫硬盘序列号?指的是作为一个 ...
- 使用RXTX获取电脑串口
RXTX是javacomm串口通信的一个扩展 RXTX开发所需文件的下载地址:http://rxtx.qbang.org/wiki/index.php/Download 解压之后可以看到支持各个平台的 ...
- C# -- 使用System.Environment获取电脑的相关属性
使用System.Environment获取电脑的相关属性 1.使用System.Environment获取电脑的相关属性(入门案例) static void Main(string[] args) ...
- vue 项目使用 webpack 构建自动获取电脑ip地址
1.开发 H5 时移动端,经常会使用真机进行调试本地环境.webpack 配置服务器好多脚手架写的都是固定的,而在团队开发中需要每人配置自己的本机 ip 进行开发,每次开启开发环境的都需要修改,并且还 ...
- java工具类,在Windows,Linux系统获取电脑的MAC地址、本地IP、电脑名
package com.cloudssaas.util; import java.io.BufferedReader; import java.io.IOException; import java. ...
- QT 获取电脑时间
使用环境: VS2010 & QT Designer5 #include <QDateTime> //包含头文件 QDateTime local(QDateTime::curre ...
- java获取电脑部分信息
获取mac地址与cpu序列号 参考博客:https://www.jb51.net/article/94793.htm 另一篇参考地址没记录下来 package util; import java.io ...
- C#获取电脑型号、系统版本、内存大小、硬盘大小、CPU信息
摘要 有时需要获取电脑的相关信息.这时可以通过调用windows api的方式,进行获取. 方法 可以通过在powershell中 通过下面的命令进行查询,然后可以通过c#调用获取需要的信息. gwm ...
- Java获取电脑IP、MAC、各种版本
Java代码获取电脑IP.MAC.各种版本 package com.rapoo.middle.action; import java.io.BufferedReader; import java.io ...
随机推荐
- C# 查看动态库的方法
使用Vs自带工具:开始菜单-->Microsoft Visual Studio 2010--> Visual Studio Tools-->Visual Studio 命令提示符 输 ...
- spring 多线程
http://blog.csdn.net/chszs/article/details/8219189 一.ThreadPoolTaskExecutor ThreadPoolTaskExecutor的配 ...
- HTML - 隐藏滚动条但可以滚动
代码:(原理就是遮盖) 1.如果你把子div的140px宽度移除,你就明白其中的奥妙了. 2.原理就是父元素负责滚动,子元素负责遮盖. <html> <style> .scro ...
- 并发编程之socketserver模块
一.socketserver模块介绍 基于tcp套接字,关键的就是两个循环,一个是链接循环,一个是通信循环 socketserver模块中分两大类:srever类(解决链接问题)和request类(解 ...
- mac重装系统
通过 macOS 恢复功能启动macOS 恢复功能会根据您在电脑启动时按下的组合键来安装不同版本的 macOS.在按电源按钮打开 Mac 后,立即按住以下组合键之一.然后在看到 Apple 标志或旋转 ...
- MarkDown的vim插件安装
作用:可以使markdown语法高亮.1.安装.使用pathogen插件管理. cd ~/.vim/bundle git clone https://github.com/plasticb ...
- 批处理学习笔记7 - 管道连接符"|"
|就是把左边作为值传递给右边.有一些命令运用它比较方便 @echo off ping baidu.com | find "TTL" pause 这段命令就是把左边ping的结果传递 ...
- 【Android】11.3 屏幕旋转和场景变换过程中GridView的呈现
分类:C#.Android.VS2015: 创建日期:2016-02-21 一.简介 实际上,对于布局文件中的View来说,大多数情况下,Android都会自动保存这些状态,并不需要我们都去处理它.这 ...
- jquery.roundabout.js图片叠加3D旋转
Roundabout是一个jQuery插件能够将一组静态HTML元素转换成可以灵活定制具有类似于转盘旋转效果的交互区域.有多种旋转形状可供选择.官方说明:roundabout.js是一个jQuery插 ...
- java.lang.NoClassDefFoundError: Ljavax/enterprise/inject/spi/BeanManager;
java.lang.NoClassDefFoundError: Ljavax/enterprise/inject/spi/BeanManager; 删除Struts2-cdi-plug 的插件的jar ...