Когда мое приложение запустилось? - PullRequest
8 голосов
/ 12 ноября 2009

Какова функция для получения даты и времени выполнения приложения? Я использую Delphi.

Ответы [ 4 ]

15 голосов
/ 13 ноября 2009

Вы можете использовать вызов Windows API для GetProcessTimes (объявлен в Windows.pas), чтобы получить подробную информацию о любом процессе.

Если это ваше приложение, я, вероятно, сам получу время запуска и зарегистрирую его где-нибудь, чтобы сохранить историю.

4 голосов
/ 13 ноября 2009

Я не уверен, есть ли функция или вызов API для этого. Но вы можете подделать это довольно легко. Создайте юнит, который выглядит следующим образом:

unit AppStartTime;

interface

function GetAppStartTime: TDateTime;

implementation
uses
  SysUtils;

var
  fStartTime: TDateTime;

function GetAppStartTime: TDateTime;
begin
  result := fStartTime;
end;

initialization
  fStartTime := Now;

end.

Добавьте его в свой DPR. использует список вверху, сначала или сразу после всего, что «должно быть первым в списке», например, пользовательский менеджер памяти.

2 голосов
/ 13 ноября 2009

Использование NtQuerySystemInformation с информационным классом SystemProcessInformation. Возвращает массив структур (записей) SYSTEM_PROCESSES, в которых CreateTime содержит точное время запуска приложений:

  _SYSTEM_PROCESSES = record // Information Class 5
    NextEntryDelta: ULONG;
    ThreadCount: ULONG;
    Reserved1: array[0..5] of ULONG;
    CreateTime: LARGE_INTEGER;
    UserTime: LARGE_INTEGER;
    KernelTime: LARGE_INTEGER;
    ProcessName: UNICODE_STRING;
    BasePriority: KPRIORITY;
    ProcessId: ULONG;
    InheritedFromProcessId: ULONG;
    HandleCount: ULONG;
    // next two were Reserved2: array [0..1] of ULONG; thanks to Nico Bendlin
    SessionId: ULONG;
    Reserved2: ULONG;
    VmCounters: VM_COUNTERS;
    PrivatePageCount: ULONG;
    IoCounters: IO_COUNTERSEX; // Windows 2000 only
    Threads: array[0..0] of SYSTEM_THREADS;
  end;
  SYSTEM_PROCESSES = _SYSTEM_PROCESSES;
  PSYSTEM_PROCESSES = ^SYSTEM_PROCESSES;
  TSystemProcesses = SYSTEM_PROCESSES;
  PSystemProcesses = PSYSTEM_PROCESSES;

Мы уже перевели все это в «Джедай Апилиб» (JwaNative)

1 голос
/ 13 ноября 2009

Приложение может регистрировать время запуска в текстовом файле или базе данных либо в файле DPR, либо в событии OnCreate () главной формы. Вы можете использовать функцию Delphi Now (), чтобы получить текущую дату и время, и отформатировать ее как строку, используя FormatDateTime () или DateTimeToStr (), в зависимости от того, что именно вы хотите сделать.

Приведенный ниже код сохраняет дату и время запуска в конструкторе основной формы в текстовом файле в той же папке, что и само приложение, называемое StartDateTime.txt:

procedure TForm1.FormCreate(Sender: TObject);
var
  SL: TStringList;
begin
  SL := TStringList.Create;
  try
    SL.Add(FormatDateTime('mm/dd/yyyy hh:nn:ss', Now());
    SL.SaveToFile(ExtractFilePath(ParamStr(0)) + 'StartDateTime.txt');
  finally
    SL.Free;
  end;
end;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...