问题描述
包含更改时间例程的程序在Borland Delphi 7 IDE中运行时确实会更改时间。但是,当它独立运行时(在Delphi IDE外部),它不会更改时间。我正在使用Windows7。请您提供帮助吗?谢谢。
...
procedure TForm1.changetime;
begin
DateSeparator:='-';
ShortDateFormat:='yyyy-MM-dd';
LongDateFormat:='yyyy''Year'',MM''Month'',dd''Date''';
TimeSeparator:=':';
DateTimetoString(date,'yyyy-mm-dd',Now);
DateTimetoString(time,'hh:nn:ss',Now);
cd:='2014-06-01 '+time;
d1:=StrToDateTime(cd);
DateTimetoSystemTime(d1,systemtime);
SetLocalTime(SystemTime);
end;
...
解决方法
我的灵性告诉我,您正在以管理权限运行Delphi 7 IDE。
如果是这样,则当从IDE启动应用程序时,它们将被应用程序的进程继承。但是,当然,当您双击应用程序的图标(例如,在Windows资源管理器中)时,该应用程序将以未提升的特权执行。
要更改系统时间,您需要提升的特权。这解释了观察到的行为。
当您想从调试器外部启动应用程序时,请确保以提升的方式运行它。例如,您可以右键单击其图标,然后选择“以管理员身份运行”。
实际上,您几乎可以自己解决这个问题。因为每次使用Windows API函数时,您都要检查其返回值。来自the documentation:
如果函数成功,则返回值为非零。
如果函数失败,则返回值为零。要获取扩展的错误信息,请致电
GetLastError
。
所以你应该做
if not SetLocalTime(st) then
RaiseLastOSError
在我的系统上,这告诉我权限不足。