用Windows API在不同版本操作系统中设置系统时区的有关问题
用Windows API在不同版本操作系统中设置系统时区的问题 - C++ Builder / Windows SDK/API
本人用Windows API 函数 SetTimeZoneInformation(TIME_ZONE_INFORMATION *lpTimeZoneInformation)来设置系统的时区
因为在调用这个函数之前首先要获得系统的权限,****上是这么说的
“Use the AdjustTokenPrivileges function to enable the privilege before calling SetTimeZoneInformation, and then to disable the privilege after the SetTimeZoneInformation call”
我碰到一个问题,在XP操作系统中对应的权限叫做SE_SYSTEMTIME_NAME,获取权限的代码如下:
LookupPrivilegeValue(
NULL,
SE_SYSTEMTIME_NAME,
&tkp.Privileges[0].Luid
);
但是在XP以上版本的操作系统,如Vista、Win7中,这个权限不叫SE_SYSTEMTIME_NAME了,而是叫SE_TIME_ZONE_NAME,也就是说对应的获取权限代码应该是这样的
LookupPrivilegeValue(
NULL,
SE_TIME_ZONE_NAME,
&tkp.Privileges[0].Luid
);
我将SE_SYSTEMTIME_NAME改为SE_TIME_ZONE_NAME后编译器提示SE_TIME_ZONE_NAME未定义,我的操作系统是XP的
请问我如何编写才能让程序既能够在XP操作系统中运行,又能在Vista、Win7中运行呢?
------解决方案--------------------
本人用Windows API 函数 SetTimeZoneInformation(TIME_ZONE_INFORMATION *lpTimeZoneInformation)来设置系统的时区
因为在调用这个函数之前首先要获得系统的权限,****上是这么说的
“Use the AdjustTokenPrivileges function to enable the privilege before calling SetTimeZoneInformation, and then to disable the privilege after the SetTimeZoneInformation call”
我碰到一个问题,在XP操作系统中对应的权限叫做SE_SYSTEMTIME_NAME,获取权限的代码如下:
LookupPrivilegeValue(
NULL,
SE_SYSTEMTIME_NAME,
&tkp.Privileges[0].Luid
);
但是在XP以上版本的操作系统,如Vista、Win7中,这个权限不叫SE_SYSTEMTIME_NAME了,而是叫SE_TIME_ZONE_NAME,也就是说对应的获取权限代码应该是这样的
LookupPrivilegeValue(
NULL,
SE_TIME_ZONE_NAME,
&tkp.Privileges[0].Luid
);
我将SE_SYSTEMTIME_NAME改为SE_TIME_ZONE_NAME后编译器提示SE_TIME_ZONE_NAME未定义,我的操作系统是XP的
请问我如何编写才能让程序既能够在XP操作系统中运行,又能在Vista、Win7中运行呢?
------解决方案--------------------
- C/C++ code
LookupPrivilegeValue( NULL, Win32MajorVersion <= 5? TEXT("SeSystemtimePrivilege"): TEXT("SeTimeZonePrivilege"), &tkp.Privileges[0].Luid );