gpt4 book ai didi

c++ - 如何在 Windows 中更改系统时区?

转载 作者:可可西里 更新时间:2023-11-01 10:42:40 34 4
gpt4 key购买 nike

我正在编写一个允许更改 Windows 中使用的当前时区参数的软件:

enter image description here

到目前为止,我找到的关于设置系统范围时区的唯一引用是 SetTimeZoneInformation API(或其变体 SetDynamicTimeZoneInformation。)但我不确定如何使用它来更改当前时区?

例如,需要TIME_ZONE_INFORMATION包含有关本地时间偏移、夏令时设置等各种信息的结构。我不明白为什么我需要填写所有这些信息,而我只想说,从更改当前时区>“(UTC-08:00) 太平洋时间(美国和加拿大)”“(UTC-07:00) 山区时间(美国和加拿大)”

我是否在寻找正确的 API 来执行此操作?

最佳答案

已经有一段时间了,所以让我试着回顾一下我最后做了什么。不幸的是,我的解决方案是特定于操作系统的:

  • 对于 Windows Vista 及更高版本:

    1. 设置SE_TIME_ZONE_NAME权限。

    2. 调用SetDynamicTimeZoneInformation通过指定要设置的时区的详细信息。

    3. 移除 SE_TIME_ZONE_NAME 权限。

  • 对于 Windows XP:

    1. 设置 SE_SYSTEMTIME_NAME 权限。

    2. 调用SetTimeZoneInformation包含有关要设置的时区的信息。

    3. 重置 SE_SYSTEMTIME_NAME 权限。

最后,对于两个操作系统,广播以下消息让正在运行的应用程序知道时区已更改:

::SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0, (LPARAM)L"intl",
SMTO_ABORTIFHUNG,
2 * 1000, //the total wait time can be up to the value of uTimeout multiplied by the number of top-level windows.
NULL);

附言。要获取有关当前时区的信息,请使用 GetDynamicTimeZoneInformationGetTimeZoneInformation(适用于 WinXP)。

此外,您可能想要检索所有可用时区的列表,您可以使用这些列表来选择新(默认)时区的信息。您可以通过枚举/解析以下注册表项来获取它:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones

检查 herehere有关其结构的信息。

关于c++ - 如何在 Windows 中更改系统时区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43358025/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com