static int GetDesktopScale()
{
int desktop_scale = ;
HINSTANCE hUser32 = LoadLibrary(L"user32.dll");
if (hUser32)
{
typedef BOOL(WINAPI* LPSetProcessDPIAware)(void);
LPSetProcessDPIAware pSetProcessDPIAware = (LPSetProcessDPIAware)GetProcAddress(hUser32, "SetProcessDPIAware");
if (pSetProcessDPIAware)
{
//去掉系统的放大,不应该调用
//pSetProcessDPIAware();
std::wstring value;
HKEY hKEY;
long ret = ;
ret = ::RegOpenKeyEx(HKEY_CURRENT_USER, L"CONTROL PANEL\\DESKTOP\\WINDOWMETRICS", , KEY_ALL_ACCESS, &hKEY);
if (ret != ERROR_SUCCESS) //该键值不存在
{
::RegCloseKey(hKEY);
}
else
{
DWORD datasize = ;
int data;
DWORD dType = REG_DWORD;
ret = ::RegQueryValueEx(hKEY, L"AppliedDPI", NULL, &dType, (LPBYTE)&data, &datasize);
if (ret != ERROR_SUCCESS)
{
::RegCloseKey(hKEY);
}
else
{
if (data > )
{
desktop_scale = data * / ;
}
::RegCloseKey(hKEY);
}
}
}
FreeLibrary(hUser32);
}
return desktop_scale;
}

在我的电脑上测试过。更改显示比例后,需要注销才能生效。估计是通过注销来写入注册表的。

windows获取屏幕显示比例 读取注册表法的更多相关文章

  1. 读取注册表获取Windows系统XP/7/8/10类型(使用wcscmp比较wchar[]内容)

    很多方案是采用GetVersion.GetVersionEx这两个API来查询操作系统的版本号来判断当前的操作系统是Windows系列中的哪个,在Win10没有出现前,这种方法是行的通的,但是Win1 ...

  2. Java Windows下读取注册表的工具类

    import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import ...

  3. inno setup读取注册表遇到的一个坑

    一.背景 目前,公司针对PR开发的一个插件需要发布到64位系统上.该插件包括一个prm格式的文件和若干个DLL文件.其中,prm文件需要复制到PR公共插件目录下,DLL需要复制到Windows系统目录 ...

  4. WinCE下读取注册表获得SD路径

    WinCE下读取注册表获得SD路径 [要点]WinCE注册表中[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\SDMemory\] 下键Folde ...

  5. C#读取注册表信息

    注册表是视窗系统的一个核心的数据库,在这个数据库中存放中与系统相关的各种参数,这些参数直接控制中系统的启动.硬件的驱动程序安装信息以及在视窗系统上运行的各种应用程序的注册信息等.这就意味着,如果注册表 ...

  6. C#读取注册表中二进制类型的值(REG_BINARY)

    如需要读取注册表中某个键的值, 例如读取DriverDesc对应的值,一般情况下为String类型,读取代码如下: RegistryKey driverKey = Registry.LocalMach ...

  7. 用javascript技术读取注册表中软件安装位置并启动本地软件

    1.首先读取注册表中本地软件安装的位置,如果未安装则无就跳转到下载页面. 2.启动软件,关闭页面. 3.如报错提示. <SCRIPT language=javascript>  <! ...

  8. c++读取注册表的实例

    // CRegisterTest.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> #in ...

  9. C++ 64位操作系统调用 RegOpenKey() 读取注册表,返回 2, ERROR_FILE_NOT_FOUND

    环境:64位操作系统, VS2017 首先在命令行执行 REG ADD HKLM\Software\seastarsun /v serial /t REG_SZ /d 58ae4cb077a4e1 在 ...

随机推荐

  1. Fatal error in launcher: Unable to create process using '"'的报错解决

    执行命令前加python -m就好了 python -m pip install --upgrade pip这条命令用来升级pip

  2. Java集合(8):Hashtable

    一.Hashtable介绍 和HashMap一样,Hashtable 也是一个散列表,它存储的内容是键值对(key-value)映射,它在很大程度上和HashMap的实现差不多. Hashtable ...

  3. 一个很牛的计算pi的c程序!

    C语言是面向过程的一种高级程序设计语言,它在世界范围内使用很广泛,而且很流行.很多大型的应用软件,基本上是用C语言所编写的.在对操作系统以及系统使用程序.需要对硬件进行操作的场合,C语言较其他的高级语 ...

  4. solr 利用cul或solr界面单值更新

    本文主要是指利用solr界面或cul的更新solr的值.如果需要代码中单值更新请参考黎明露珠的博客链接:http://www.cnblogs.com/limingluzhu/p/5535314.htm ...

  5. 防火墙之地址转换SNAT DNAT

    一.SNAT源地址转换. 1.原理:在路由器后(PSOTROUTING)将内网的ip地址修改为外网网卡的ip地址. 2.应用场景:共享内部主机上网. 3.设置SNAT:网关主机进行设置. (1)设置i ...

  6. linux mkisofs(genisoimage)命令用法

    功能说明:建立ISO 9660映像文件. 常用命令:genisoimage -o imagename.iso file 语 法:mkisofs [-adDfhJlLNrRTvz][-print-siz ...

  7. oracle 11g的卸载

    oracle 11g 的卸载主要有两种方式:一种是使用Oracle Universal Installer管理工具,该工具以向导模式进行,比较简单.这里主要讲解第二种卸载数据库的方式-----使用”d ...

  8. jQuery全屏图片焦点图

    在线演示 本地下载

  9. 20145219 《Java程序设计》第07周学习总结

    20145219 <Java程序设计>第07周学习总结 教材学习内容总结 认识时间与日期 时间的度量 1.格林威治时间(GMT):通过观察太阳而得,因为地球公转轨道为椭圆形且速度不一,本身 ...

  10. SElinux 读懂.te 定义自己的 .te【转】

    本文转载自:https://blog.csdn.net/kongbaidepao/article/details/61417291 一. .te 文件定义中的一些宏 1.1 unix_socket_c ...