diff --git a/sln/Release/hgsetver.exe b/sln/Release/hgsetver.exe index 023feed..d86cae3 100644 Binary files a/sln/Release/hgsetver.exe and b/sln/Release/hgsetver.exe differ diff --git a/sln/hgsetver/hgsetver.cpp b/sln/hgsetver/hgsetver.cpp index 2feecde..86ad4fb 100644 --- a/sln/hgsetver/hgsetver.cpp +++ b/sln/hgsetver/hgsetver.cpp @@ -146,6 +146,24 @@ static oem from_str(const wchar_t* str) return OEM_NOT; } +static int oem_code(oem o) +{ + if (o == OEM_HANWANG) + return 16; + else if (o == OEM_LISICHENG) + return 14; + else + return 10; +} +static oem oem_from_code(int code) +{ + if (code == 16) + return OEM_HANWANG; + else if (code == 14) + return OEM_LISICHENG; + else + return OEM_NONE; +} static int find_line(std::wstring& brand, const wchar_t* line_tag, int* end) { int bgn = 0, next = 0, start = -1; @@ -217,7 +235,7 @@ static bool change_sub(std::wstring& brand, int sub, int main) { wchar_t ver[20] = { 0 }; int next = 0, - bgn = find_line(brand, L"#define VERSION_SUB", &next); + bgn = find_line(brand, L"#define VERSION_SUB", &next); bool ret = false; if (bgn >= 0) @@ -227,7 +245,8 @@ static bool change_sub(std::wstring& brand, int sub, int main) bgn++; if (brand[bgn] >= L'0' && brand[bgn] <= L'9') { - sub += _wtoi(brand.c_str() + bgn) % 100; + sub = _wtoi(brand.c_str() + bgn); + //sub += _wtoi(brand.c_str() + bgn) % 100; //if(main) sub++; swprintf_s(ver, _countof(ver) - 1, L"%d\r\n", sub); @@ -266,6 +285,36 @@ static bool change_build(std::wstring& brand, int build) return ret; } +static bool change_build(std::wstring& brand, oem o, bool x86) +{ + wchar_t ver[20] = { 0 }; + int next = 0, + bgn = find_line(brand, L"#define VERSION_BUILD1", &next), + build = oem_code(o); + bool ret = false; + + build *= 10; + build += x86 ? 0 : 1; + build *= 100; + + swprintf_s(ver, _countof(ver) - 1, L"%d\r\n", build); + if (bgn >= 0) + { + bgn += lstrlenW(L"#define VERSION_BUILD1"); + while (brand[bgn] == L'\t' || brand[bgn] == L' ') + bgn++; + if (brand[bgn] >= L'0' && brand[bgn] <= L'9') + { + brand.replace(bgn, next - bgn, ver); + ret = true; + } + } + + if (!ret) + std::wcout << L" change VERSION_BUILD1 to '" << ver << L"+' failed.\r\n"; + + return ret; +} static bool change_patch(std::wstring& brand, int patch) { wchar_t ver[20] = { 0 }; @@ -1054,12 +1103,15 @@ static bool set_ver(const wchar_t* file, oem vendor, bool x86, int pid, int main build = cur->tm_year + 1900, patch = (cur->tm_mon + 1) * 1000 + cur->tm_mday * 10; - if (vendor == OEM_HANWANG) - patch += 6; - else if (vendor == OEM_LISICHENG) - patch += 7; - else - patch += 1; + //if (vendor == OEM_HANWANG) + // patch += 6; + //else if (vendor == OEM_LISICHENG) + // patch += 7; + //else + // patch += 1; + patch = cur->tm_year % 100; + patch *= 1000; + patch += cur->tm_yday + 1; while (change_oem(unic, vendor)) { @@ -1070,7 +1122,7 @@ static bool set_ver(const wchar_t* file, oem vendor, bool x86, int pid, int main if (!change_sub(unic, sub, main)) break; } - if (!change_build(unic, build)) + if (!change_build(unic, vendor, x86)) break; if (!change_patch(unic, patch)) break;