如何默认激活"disable display scaling on high dpi settings"

How to activate "disable display scaling on high dpi settings" by default

我们的应用程序无法在某些具有高 DPI 设置(150% 或更高)的 Windows 8.1 设备上正常运行。具体来说,我们正在托管使用 CEF 的嵌入式 Web 浏览器。所有这些嵌入式 CEF 浏览器都在呈现元素偏移量。

选中 "Disable display scaling on high DPI settings" 后应用程序运行正常。但是,默认情况下不选中此选项。

如何确保我的应用程序(基于 MFC)构建时默认勾选了此设置?

我已经尝试按照以下帖子在清单中关闭 DPI 感知:https://msdn.microsoft.com/en-us/magazine/dn574798.aspx and http://blogs.msdn.com/b/vcblog/archive/2010/03/11/mfc-applications-now-default-to-being-dpi-aware.aspx。但是,这似乎没有用。

基本问题已通过更新 CEF 得到修复。

但是,临时解决方案(以及这个问题的实际答案,希望对其他人有用)是在我们的 (WiX) 期间使用自定义操作打开 "Disable display scaling on high DPI settings" 复选框安装。这是一些 C++ 代码:

#include "shlwapi.h"

#include <winreg.h>
//
// Include the MSI declarations etc
//  - Also ensure the dll is linked with msi.lib
//
#include <msi.h>
#include <msiquery.h>
#pragma comment(lib, "msi.lib")

UINT __stdcall DisableHighDPIAware(MSIHANDLE hInstaller)
{
    HKEY key;
    DWORD dwDisposition;
    LONG error = RegCreateKeyEx(HKEY_LOCAL_MACHINE,(LPCWSTR)L"Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers", 0, NULL, 0, KEY_ALL_ACCESS | KEY_WRITE | KEY_WOW64_64KEY, NULL, &key, &dwDisposition);
    if (error != ERROR_SUCCESS)
    {
        return ERROR_INSTALL_FAILURE;
    }

    wchar_t pathToApp[MAX_PATH];
    DWORD PathSize = sizeof(pathToApp);
    error = MsiGetProperty(hInstaller, L"CustomActionData", pathToApp, &PathSize);
    if (error != ERROR_SUCCESS)
    {
        return ERROR_INSTALL_FAILURE;
    }

    wchar_t* value = L"~ HIGHDPIAWARE";
    PathAppend(pathToApp, L"app.exe");

    error = RegSetValueEx(key, (LPCWSTR)pathToApp, 0, REG_SZ, (const BYTE*)value, (DWORD)(lstrlen(value) + 1)*sizeof(TCHAR));
    if (error != ERROR_SUCCESS)
    {
        return ERROR_INSTALL_FAILURE;
    }

    return ERROR_SUCCESS;
}