223 lines
4.9 KiB
C++
223 lines
4.9 KiB
C++
// hgsetver.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
|
|
//
|
|
|
|
#include <Windows.h>
|
|
#include <string>
|
|
|
|
static bool isLeap(int year)
|
|
{
|
|
if ((year % 400 == 0) || (year % 4 == 0 && year % 100 != 0))
|
|
return true;
|
|
return false;
|
|
}
|
|
|
|
static int getDays(int year, int month)
|
|
{
|
|
if (2 == month)
|
|
{
|
|
if (isLeap(year))
|
|
return 29;
|
|
else
|
|
return 28;
|
|
}
|
|
|
|
if (4 == month || 6 == month || 9 == month || 11 == month)
|
|
{
|
|
return 30;
|
|
}
|
|
|
|
return 31;
|
|
}
|
|
|
|
static int getPatchVersion()
|
|
{
|
|
SYSTEMTIME st;
|
|
GetLocalTime(&st);
|
|
|
|
int year = st.wYear;
|
|
int day = st.wDay;
|
|
int month = st.wMonth;
|
|
|
|
int ret = year % 100;
|
|
ret *= 1000;
|
|
|
|
for (int i = 1; i < month; ++i)
|
|
{
|
|
ret += getDays(year, i);
|
|
}
|
|
|
|
ret += day;
|
|
return ret;
|
|
}
|
|
|
|
int main(int argc, char* argv[])
|
|
{
|
|
std::string brandFile;
|
|
std::string resourceFile;
|
|
std::string oemName = "OEM_HUAGAO";
|
|
std::string cpu = "x86";
|
|
|
|
for (int i = 1; i < argc; i++)
|
|
{
|
|
char* z = argv[i];
|
|
|
|
if (z == strstr(z, "-brandFile="))
|
|
brandFile = z + strlen("-brandFile=");
|
|
else if (z == strstr(z, "-resourceFile="))
|
|
resourceFile = z + strlen("-resourceFile=");
|
|
else if (z == strstr(z, "-oemName="))
|
|
oemName = z + strlen("-oemName=");
|
|
else if (z == strstr(z, "-cpu="))
|
|
cpu = z + strlen("-cpu=");
|
|
}
|
|
|
|
printf("brandFile:%s\n", brandFile.c_str());
|
|
printf("resourceFile:%s\n", resourceFile.c_str());
|
|
printf("oemName:%s\n", oemName.c_str());
|
|
printf("cpu:%s\n", cpu.c_str());
|
|
|
|
if (brandFile.empty() || resourceFile.empty())
|
|
{
|
|
return -1;
|
|
}
|
|
|
|
int mainVersion = 0;
|
|
int subVersion = 0;
|
|
int buildVersion = 0;
|
|
int patchVersion = 0;
|
|
|
|
FILE* fp = fopen(brandFile.c_str(), "r");
|
|
if (fp != NULL)
|
|
{
|
|
while (feof(fp) == 0)
|
|
{
|
|
char lineContent[2048] = { 0 };
|
|
if (NULL == fgets(lineContent, 2048, fp))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
if (0 == mainVersion)
|
|
{
|
|
char* p = strstr(lineContent, "VERSION_MAIN");
|
|
if (NULL != p)
|
|
{
|
|
p += strlen("VERSION_MAIN");
|
|
while (isspace(*p))
|
|
++p;
|
|
mainVersion = atoi(p);
|
|
}
|
|
}
|
|
|
|
if (0 == subVersion)
|
|
{
|
|
char *p = strstr(lineContent, "VERSION_SUB");
|
|
if (NULL != p)
|
|
{
|
|
p += strlen("VERSION_SUB");
|
|
while (isspace(*p))
|
|
++p;
|
|
subVersion = atoi(p);
|
|
}
|
|
}
|
|
|
|
if (0 != mainVersion && 0 != subVersion)
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
|
|
fclose(fp);
|
|
}
|
|
|
|
if (oemName == "OEM_LISICHENG")
|
|
buildVersion = 14;
|
|
else if (oemName == "OEM_HANWANG")
|
|
buildVersion = 16;
|
|
else if (oemName == "OEM_CANGTIAN")
|
|
buildVersion = 18;
|
|
else if (oemName == "OEM_ZHONGJING")
|
|
buildVersion = 20;
|
|
else if (oemName == "OEM_ZIGUANG")
|
|
buildVersion = 22;
|
|
else if (oemName == "OEM_DELI")
|
|
buildVersion = 24;
|
|
else if (oemName == "OEM_NEUTRAL")
|
|
buildVersion = 26;
|
|
else
|
|
buildVersion = 10;
|
|
|
|
buildVersion = buildVersion * 10;
|
|
|
|
if (cpu == "x64")
|
|
buildVersion += 1;
|
|
else
|
|
buildVersion += 0;
|
|
|
|
buildVersion *= 100;
|
|
|
|
patchVersion = getPatchVersion();
|
|
|
|
char version1[32] = { 0 };
|
|
sprintf(version1, "%d.%d.%d.%d", mainVersion, subVersion, buildVersion, patchVersion);
|
|
char version2[32] = { 0 };
|
|
sprintf(version2, "%d,%d,%d,%d", mainVersion, subVersion, buildVersion, patchVersion);
|
|
|
|
std::string resourceData;
|
|
fp = fopen(resourceFile.c_str(), "r");
|
|
if (NULL != fp)
|
|
{
|
|
fseek(fp, 0, SEEK_END);
|
|
long size = ftell(fp);
|
|
|
|
fseek(fp, 0, SEEK_SET);
|
|
char* buf = new char[size + 1];
|
|
fread(buf, 1, size, fp);
|
|
buf[size] = 0;
|
|
resourceData = buf;
|
|
delete [] buf;
|
|
|
|
fclose(fp);
|
|
}
|
|
|
|
if (resourceData.empty())
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
size_t offset = 0;
|
|
while (1)
|
|
{
|
|
size_t pos = resourceData.find("0,0,0,0", offset);
|
|
if (std::string::npos == pos)
|
|
{
|
|
break;
|
|
}
|
|
|
|
resourceData.replace(pos, strlen("0,0,0,0"), version2);
|
|
offset = pos + strlen(version2);
|
|
}
|
|
|
|
offset = 0;
|
|
while (1)
|
|
{
|
|
size_t pos = resourceData.find("0.0.0.0", offset);
|
|
if (std::string::npos == pos)
|
|
{
|
|
break;
|
|
}
|
|
|
|
resourceData.replace(pos, strlen("0.0.0.0"), version1);
|
|
offset = pos + strlen(version1);
|
|
}
|
|
|
|
fp = fopen(resourceFile.c_str(), "w");
|
|
if (NULL != fp)
|
|
{
|
|
fwrite(&resourceData[0], 1, resourceData.size(), fp);
|
|
fclose(fp);
|
|
}
|
|
|
|
return 0;
|
|
}
|