如何使用windowsapi更改时区设置
How to change time zone settings using windows api
我需要通过应用程序中的API更改DST和时区。我修改了&在以下链接的末尾复制了"SetTimeZoneInformation"用法的示例,并运行了它:http://msdn.microsoft.com/en-us/library/windows/desktop/ms724944(v=vs.85).aspx
我假设我的时间设置应该反映托盘或控制面板中的时间设置。但什么也没发生。
下面的事情也应该注意。
此代码修改"HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation"键内容。并且"HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\时区\我的时区"线程中没有任何更改。但这就是我要找的!
有没有任何方法可以在C++中使用API修改"我的时区"?
添加(来自本应在此处编辑的答案):
所以,实际上,我的目标是让我的应用程序在Win7下运行。现有功能使用MANUAL DST支持。因此,我需要以某种方式将手动DST和GMT偏移设置与Win7同步。据我所知,SetTimeZoneInformation函数只是根据我的输入,尝试从现有的一组时区中查找时区。如果没有与我的输入相等的时区,Win7会使用默认时区,例如UTC-12,并通知用户"当前时区无法识别"。
那么,我应该用什么方法来实现这一点呢?
假设您的代码以所需的权限运行,并且SetTimeZoneInformation()
由于其他原因没有返回FALSE
,那么它确实更改了系统的时区。
然而,通知区域中的时钟小程序并不知道这一变化,因为您一开始就忘记了做广告。引用文件的Remarks
部分:
要通知资源管理器时区已更改,请发送
WM_SETTINGCHANGE
消息。
因此,当应用程序更改系统时区时,应该向所有顶级窗口广播WM_SETTINGCHANGE消息。类似于:
SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, NULL, NULL,
SMTO_NORMAL, aShortTimeoutInMilliseconds, NULL);
是否检查了返回代码中的错误?请参阅链接页面中的以下内容:
应用程序必须对此具有
SE_TIME_ZONE_NAME
权限成功的功能。默认情况下会禁用此权限。使用调用前启用特权的AdjustTokenPrivileges
函数SetTimeZoneInformation
,然后在SetTimeZoneInformation
调用。有关详细信息,请参阅与一起跑步特殊特权。
此外,将WM_SETTINGCHANGE
作为广播消息发送以通知"托盘"(SNA)有关该改变。
我知道示例代码试图启用特权,但它不会进行错误检查,并且无论如何都会调用SetTimeZoneInformation
。。。
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 在C++/Linux中设置单调时钟的一些技巧
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 嵌套在类中时无法设置成员数据
- 需要帮助设置在C++中使用的Potrace
- 如何在自删除后将对象设置为nullptr
- 将指针设置为"nullptr"并不能防止双重删除?
- 如何在Ubuntu中使用cmake设置qt4
- ld:bind_at_load和-bitcode_bundle(Xcode设置ENABLE_bitcode=YES)不能
- 如何在boost beast http请求中设置http头
- 如何解决gcc编译器优化导致的centos双编译器设置中的分段错误
- 如何将这个C++哈希表转换为动态扩展和收缩,而不是使用硬设置的最大值
- 为什么文件名被设置为一个点,而不是在读取矢量中的文件名时
- 如何在24位SDL_Surface上设置像素的颜色
- std::设置自定义比较器
- Log4cpp:以UTC/GMT时区打印日期
- 如何设置一个范围来提取我想要获得的信息
- 如何在Arduino上将时间设置为中部时区?
- 将NTP时间设置为特定的时区
- 如何使用windowsapi更改时区设置