如何在delphi 7中使用setlocaltime?

问题描述

包含更改时间例程的程序在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

在我的系统上,这告诉我权限不足。