首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

用Windows API在不同版本操作系统中设置系统时区的有关问题

2012-03-14 
用Windows API在不同版本操作系统中设置系统时区的问题 - C++ Builder / Windows SDK/API本人用Windows AP

用Windows API在不同版本操作系统中设置系统时区的问题 - C++ Builder / Windows SDK/API
本人用Windows API 函数 SetTimeZoneInformation(TIME_ZONE_INFORMATION *lpTimeZoneInformation)来设置系统的时区

因为在调用这个函数之前首先要获得系统的权限,CSDN上是这么说的
“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        ); 

热点排行