繁体   English   中英

如何使用 c++ 设置 windows 时钟

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM