delphi7中如何使用setlocaltime?

How to use setlocaltime in delphi 7?

包含更改时间例程的程序在 Borland Delphi 7 IDE 中运行时确实会更改时间。但是它独立运行时(Delphi IDE之外)不会改变时间。我正在使用 windows 7. 你能帮忙吗?谢谢。

...
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 启动时,这些将由您的应用程序进程继承。但是,当然,当您 运行 您的应用程序通过 double-clicking 它在 Windows 资源管理器中的图标时(例如),它会以未提升的权限执行。

要更改系统时间,您需要提升权限。这解释了观察到的行为。

当您想从调试器外部启动应用程序时,请确保 运行 它已提升。例如,您可以 right-click 它的图标和 select “运行 作为管理员”。

实际上,您几乎可以自己解决这个问题。因为每次使用 Windows API 函数时,都会检查它的返回值。来自 the documentation:

If the function succeeds, the return value is nonzero.

If the function fails, the return value is zero. To get extended error information, call GetLastError.

所以你应该这样做

if not SetLocalTime(st) then
  RaiseLastOSError

我的系统告诉我权限不足。