@humanabout

Как получить нужное значение на разных версиях виндовс?

Привет код примером ниже позволяет получить и удобно сгруппировать значения для работы приложения в разных виндовс

#include <iostream>
#include <cstdint>

namespace Offsets {
    namespace W1709 {
        struct FirstStruct {
            static constexpr std::uintptr_t somefield = 0x0;
            static constexpr std::uintptr_t someOtherField = 0x8;
        };
        struct AnotherStruct {
            static constexpr std::uintptr_t somefield = 0x4;
        };
    }

    namespace W22h2 {
        struct FirstStruct {
            static constexpr std::uintptr_t somefield = 0x10;
            static constexpr std::uintptr_t someOtherField = 0x18;
        };
        struct AnotherStruct {
            static constexpr std::uintptr_t somefield = 0x14;
        };
    }
}

int main() {
    using namespace Offsets;

    // Direct access to offsets by specific version and struct category
    std::cout << "W1709 FirstStruct::somefield offset: 0x"
        << std::hex << W1709::FirstStruct::somefield << std::endl;

    std::cout << "W22h2 FirstStruct::SomeOtherField offset: 0x"
        << std::hex << W22h2::FirstStruct::someOtherField << std::endl;

    std::cout << "W1709 AnotherStruct::someOtherField offset: 0x"
        << std::hex << W1709::AnotherStruct::somefield << std::endl;

    return 0;
}

Проблема такого подхода что он работает в билд тайме, тоетсь нельзя сделать
std::string winVer = "W22h2";
    std::cout  << std::hex << winVer::AnotherStruct::somefield << std::endl;

хотя нужен подобный фкнкционал, как его достичь и правильно)
  • Вопрос задан
  • 72 просмотра
Пригласить эксперта
Ответы на вопрос 1
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
Заведите, например enum со всеми версиями виндоуз и занумеруйте их. Смещения ваши раскладывайте не по неймспейсам, а массиве. Во время исполнения через winapi получайте версию винды и приводите ее к значению в вашем энуме. Его используйте как индекс в массиве.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы