delphi - 如何在 delphi 7 中使用 setlocaltime?

包含更改时间例程的程序在 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 启动时,它们将被继承。但是,当然,当您通过在 Windows 资源管理器中双击其图标(例如)来运行您的应用程序时,它会以未提升的权限执行。

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

当您想从调试器外部启动您的应用程序时,请确保以提升的方式运行它。例如,您可以右键单击其图标并选择“以管理员身份运行”。

实际上,您几乎可以自己解决这个问题。因为每次使用 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

我的系统告诉我我没有足够的权限。

https://stackoverflow.com/questions/64449732/

相关文章:

javascript - 我怎样才能解构一个 React Prop 并仍然访问其他 Prop ?

c# - 如何在 ASP Core 的静态类中使用 "IWebHostEnvironment"

ios - 从初始化器返回而不初始化所有存储的属性 - SwiftUI 绑定(bind)错误

python - Pandas 数据框拆分并获取列表的最后一个元素

java - cf 推送失败 Java 版本不匹配

c - 可能知道变量所在的内存部分?

javascript - Angular 子组件无法识别输入更改

vim - 如何在没有重新映射的情况下仅使用一个命令在 Neovim 的新选项卡中打开终端?

java - 首次安装应用程序时无法解析 android 11 中的 com.android.cam

haskell - 获取haskell中字符串的所有旋转