直接用98的方法(SetLocalTime或SetSystemTime)是不管用的了.它需要一个什么令牌。我尝试了,还是不行,不过关机是可以的。 我的身份是管理员,代码如下:
SYSTEMTIME systime; //改变本机时间
systime.wYear=2000;systime.wMonth=5;systime.wDay=4;
systime.wHour=10;systime.wMinute=5;systime.wSecond=45; HANDLE hToken; TOKEN_PRIVILEGES tkp;
if(!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,&hToken))
{MessageBox("1错了");return;}
LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&tkp.Privileges[0].Luid);
tkp.PrivilegeCount=1;
tkp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken,false,&tkp,0,(PTOKEN_PRIVILEGES)NULL,0);
if(GetLastError()!=ERROR_SUCCESS)
{MessageBox("2错了");return;} ::SetLocalTime(&systime);//这里返回的结果是false,也就是修改失败
tkp.Privileges[0].Attributes=0;
AdjustTokenPrivileges(hToken,false,&tkp,0,(PTOKEN_PRIVILEGES)NULL,0);
if(GetLastError()!=ERROR_SUCCESS)
{MessageBox("4错了");return;}
SYSTEMTIME systime; //改变本机时间
systime.wYear=2000;systime.wMonth=5;systime.wDay=4;
systime.wHour=10;systime.wMinute=5;systime.wSecond=45; HANDLE hToken; TOKEN_PRIVILEGES tkp;
if(!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,&hToken))
{MessageBox("1错了");return;}
LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&tkp.Privileges[0].Luid);
tkp.PrivilegeCount=1;
tkp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken,false,&tkp,0,(PTOKEN_PRIVILEGES)NULL,0);
if(GetLastError()!=ERROR_SUCCESS)
{MessageBox("2错了");return;} ::SetLocalTime(&systime);//这里返回的结果是false,也就是修改失败
tkp.Privileges[0].Attributes=0;
AdjustTokenPrivileges(hToken,false,&tkp,0,(PTOKEN_PRIVILEGES)NULL,0);
if(GetLastError()!=ERROR_SUCCESS)
{MessageBox("4错了");return;}
GetSystemTime(&t);
改变时间
SetSystemTime(&t);
不过我用的不是管理员身份