【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 ...
随机推荐
- jdbc与odbc的差别,感悟,学习。。。
什么是JDBC? JDBC, 全称为Java DataBase Connectivity standard, 它是一个面向对象的应用程序接口(API), 通过它可訪问各类关系数据库.JDBC也是jav ...
- Cocos2d-x游戏移植到WP8之路 -- c++和c#交互
Cocos2d-x是眼下最流行的手机游戏引擎之中的一个,开源.轻量.多平台等的诸多特性使得它被非常多国内外手游开发人员所喜爱. 利用Cocos2d-x来开发Windows Phone 8的游戏相同也是 ...
- python中如果函数后面有多于一个括号是怎么回事?
一般而言,调用一个函数是加一个括号.如果看见括号后还有一个括号,说明第一个函数返回了一个函数,如果后面还有括号,说明前面那个也返回了一个函数.以此类推. 比如fun()() def fun(): pr ...
- django1.8forms读书笔记
一.HttpRequest对象的一些属性或方法 request.path,The full path, not including the domain but including the leadi ...
- 利用PHPExcel实现数据保存到excel文件
include(dirname(__FILE__) .'/phpexcel-1.7.7/Classes/PHPExcel.php'); include(dirname(__FILE__) .'/php ...
- cocos2dx 3.x draw debug
有时候需要用ccDrawXXX绘制debug线框来调试图形程序. 在cocos2dx 2.x中,由于是立即模式,所以如果在draw函数中用ccDrawXXX画线框,要用节点的局部坐标. 在cocos2 ...
- springcloud Ribbon自定义负载均衡插件
现在我们通过插件的方式添加新的一种策略. package com.zhuyang.config; import org.springframework.beans.factory.annotation ...
- asp.net MVC学习的一些总结
起初认为视图,控制器,模型它们是完全没有耦合的,真正用了一段时间MVC发现错了. 但通过抽象让他们完全没有耦合,也不是不可能. 1.奇怪的连接地址 用MVC之前,一直认为页面必然访问某个文件.用了MV ...
- paip.中文 分词 ---paoding 3.1 的使用
paip.中文 分词 ---paoding 3.1 的使用 paoding 3.1 下载: 1 设置字典路径 1 测试代码 1 作者Attilax 艾龙, EMAIL:1466519819@qq. ...
- Ubantu MySQL数据库操作
用户管理: 1.新建用户: >CREATE USER name IDENTIFIED BY 'ssapdrow'; 2.更改密码: >SET PASSWORD FOR name=PASSW ...