![](/img/trans.png)
[英]How do I set the windows system clock to the right local time using C++?
[英]how set the windows clock using c++
我正在尝试使用 C++ 设置 windows 系统时钟。 我正在尝试使用以下代码(不工作):
#include "stdafx.h"
#include "iostream"
#include "windows.h"
using namespace std;
int _tmain(int argc, _TCHAR* argv[]) {
SYSTEMTIME st;
st.wDay = 1;
st.wMonth = 5;
st.wYear = 2011;
st.wHour = 12;
st.wMinute = 15;
bool result = SetLocalTime(&st);
cout << result;
return 0;
}
有人可以指出我的错误吗? 提前致谢。
Windows哪个版本? 在 Vista+ 上,您需要管理员权限才能设置时间。 以管理员身份运行您的程序,它应该可以工作。
好吧,正如亚当在下面写的那样,管理员权限不是严格要求的,但让我们开始让它以简单的方式工作;-)
另外,我会 ZeroMemory(&st, sizeof(st)) 确保诸如秒之类的额外成员不包含不可接受的值。 更好的是,只需初始化结构的所有成员。
从 SetLocalTime() 文档:
调用进程必须具有 SE_SYSTEMTIME_NAME 权限。 默认情况下禁用此权限。 SetLocalTime function 在更改本地时间之前启用 SE_SYSTEMTIME_NAME 权限,在返回之前禁用该权限。 有关详细信息,请参阅以特殊权限运行。
一个可能的解决方案是在 Linker 选项中打开 UAC:
打开项目属性对话框,go 到 Linker->Manifest 并将 UAC 设置为“requireAdministrator”。
缺点是您必须以管理员身份运行 Visual Studio 才能调试您的程序。
st 未完全初始化并包含无效值。 完全初始化它,代码就可以工作了。 如果您调用了 GetLastError(),它会立即提示您,因为它返回 87,即 ERROR_INVALID_PARAMETER。 星期几、秒和毫秒字段无疑包含无效值。
您需要将不需要的参数初始化为0。
代替:
SYSTEMTIME st;
和:
SYSTEMTIME st;
ZeroMemory(&st, sizeof(st));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.