如何从 C++ 程序内部设置可执行文件的兼容模式?

问题描述 投票:0回答:1

我一直在阅读如何通过命令提示符执行此操作。我试过了。有效。然后我尝试用C++来做,但失败了。我希望这对过去的某人来说是一个问题,但我在其他地方没有找到这个问题和有效的答案。请指出以前在 C++ 中曾问过这个问题并得到有效回答的地方。不适用于 Visual C++。不适用于 C。我在 MS Windows 系统上使用 CodeBlocks。

谢谢你。

compatibility c++ regedit
1个回答
0
投票

以下代码似乎可以使用代码块 20.03 使用 MINGW 4.3.5 gcc 7.3.0(2018 版本)工作

#include <Windows.h>
#include <iostream>

int main() {
    HKEY hKey;
    LPCTSTR subKey = TEXT("Software\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\Layers");

    if (RegCreateKeyEx(HKEY_CURRENT_USER, subKey, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, NULL) == ERROR_SUCCESS) {
        LPCTSTR valueName = TEXT("C:\\Program Files\\MyApp\\Test.exe");
        LPCTSTR valueData = TEXT("WIN7RTM");

        if (RegSetValueEx(hKey, valueName, 0, REG_SZ, (LPBYTE)valueData, (lstrlen(valueData) + 1) * sizeof(TCHAR)) == ERROR_SUCCESS) {
            std::cout << "String value added successfully.\n";
        } else {
            std::cout << "Failed to set the string value.\n";
        }

        RegCloseKey(hKey);
    } else {
        std::cout << "Failed to create the registry key.\n";
    }

    return 0;
}

您可以将

HKEY_CURRENT_USER
更改为
HKEY_LOCAL_MACHINE
以将其强制作用于整个系统而不是当前用户,然后只能使用注册表修改来删除,来源:程序兼容性助手 - 第二部分

© www.soinside.com 2019 - 2024. All rights reserved.