获取应用程序执行日期和时间的功能是什么?我正在使用Delphi。
答案 0 :(得分:15)
您可以使用对GetProcessTimes的Windows API调用(在Windows.pas中声明)来获取任何进程的详细信息。
如果是您的申请,我可能会自己获得开始时间并将其记录在某个地方以保存历史记录。
答案 1 :(得分:4)
我不确定是否有针对此的函数或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 :(得分:2)
将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;
我们已经在Jedi Apilib(JwaNative)中翻译了所有这些
答案 3 :(得分:1)
您可以让您的应用程序将启动时间记录到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;