zoukankan      html  css  js  c++  java
  • windows获取屏幕显示比例 读取注册表法

    static int GetDesktopScale()
    {
        int desktop_scale = 100;
        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 = 0;
                ret = ::RegOpenKeyEx(HKEY_CURRENT_USER, L"CONTROL PANEL\DESKTOP\WINDOWMETRICS", 0, KEY_ALL_ACCESS, &hKEY);
                if (ret != ERROR_SUCCESS)  //该键值不存在
                {
                    ::RegCloseKey(hKEY);
                }
                else
                {
                    DWORD datasize = 4;
                    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 > 0)
                        {
                            desktop_scale = data * 100 / 96;
                        }
                        ::RegCloseKey(hKEY);
                    }
                }
            }
            FreeLibrary(hUser32);
        }
        return desktop_scale;
    }

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

  • 相关阅读:
    搭建集群时遇到各种奇葩问题的大招~~
    oracle初学心得(转)
    "小寒"饮食养生
    时刻修正自已的思想
    myeclipse使用
    从javascript语言本身谈项目实战(转)
    Java的内存泄漏(转)
    概念解释
    小穴位大健康——李智
    历史朝代表
  • 原文地址:https://www.cnblogs.com/zendu/p/7412107.html
Copyright © 2011-2022 走看看