unit uGetTickCount64;
interface
uses windows;
function _GetTickCount64(): Int64;
implementation
type
LARGE_INTEGER = record
lowpart :integer ;
highpart :integer;
end;
PVOID=Pointer;
_SYSTEM_INFORMATION_CLASS = (
SystemBasicInformation,
SystemProcessorInformation,
SystemPerformanceInformation,
SystemTimeOfDayInformation,
SystemNotImplemented1,
SystemProcessesAndThreadsInformation,
SystemCallCounts,
SystemConfigurationInformation,
SystemProcessorTimes,
SystemGlobalFlag,
SystemNotImplemented2,
SystemModuleInformation,
SystemLockInformation,
SystemNotImplemented3,
SystemNotImplemented4,
SystemNotImplemented5,
SystemHandleInformation,
SystemObjectInformation,
SystemPagefileInformation,
SystemInstructionEmulationCounts,
SystemInvalidInfoClass1,
SystemCacheInformation,
SystemPoolTagInformation,
SystemProcessorStatistics,
SystemDpcInformation,
SystemNotImplemented6,
SystemLoadImage,
SystemUnloadImage,
SystemTimeAdjustment,
SystemNotImplemented7,
SystemNotImplemented8,
SystemNotImplemented9,
SystemCrashDumpInformation,
SystemExceptionInformation,
SystemCrashDumpStateInformation,
SystemKernelDebuggerInformation,
SystemContextSwitchInformation,
SystemRegistryQuotaInformation,
SystemLoadAndCallImage,
SystemPrioritySeparation,
SystemNotImplemented10,
SystemNotImplemented11,
SystemInvalidInfoClass2,
SystemInvalidInfoClass3,
SystemTimeZoneInformation,
SystemLookasideInformation,
SystemSetTimeSlipEvent,
SystemCreateSession,
SystemDeleteSession,
SystemInvalidInfoClass4,
SystemRangeStartInformation,
SystemVerifierInformation,
SystemAddVerifier,
SystemSessionProcessesInformation);
SYSTEM_INFORMATION_CLASS = _SYSTEM_INFORMATION_CLASS;
TSystemInformationClass = SYSTEM_INFORMATION_CLASS;
_SYSTEM_TIME_OF_DAY_INFORMATION = record // Information Class 3
BootTime: LARGE_INTEGER;
CurrentTime: LARGE_INTEGER;
TimeZoneBias: LARGE_INTEGER;
CurrentTimeZoneId: ULONG;
end;
SYSTEM_TIME_OF_DAY_INFORMATION = _SYSTEM_TIME_OF_DAY_INFORMATION;
PSYSTEM_TIME_OF_DAY_INFORMATION = ^SYSTEM_TIME_OF_DAY_INFORMATION;
function NtQuerySystemInformation(
SystemInformationClass: SYSTEM_INFORMATION_CLASS;
SystemInformation: PVOID;
SystemInformationLength: ULONG;
ReturnLength: PULONG
): Integer; stdcall; external 'ntdll.dll';
function NtQuerySystemTime(
var CurrentTime: LARGE_INTEGER
): Integer; stdcall; external 'ntdll.dll';
//========================================
//函数:_GetTickCount64
//参数:无
//返回值:int64,操作系统启动以来时间,单位 毫秒
//环境: delphi 7 等32位 windows操作系统
//代用品: 64位等vista以后的操作系统有GetTickCount
//
function _GetTickCount64(): Int64;
var
st: SYSTEM_TIME_OF_DAY_INFORMATION;
r: ULONG;
ct: LARGE_INTEGER;
quadpart:int64 absolute ct;
quadpart2:int64 absolute st.BootTime;
begin
//
NtQuerySystemInformation(SystemTimeOfDayInformation,
@st,
SizeOf(SYSTEM_TIME_OF_DAY_INFORMATION),
@r);
//查询系统时间,得到的单位是100钠秒
NtQuerySystemTime(ct);
//
//比如 100,000,000 除以 10 得到 微秒 再除以 1000 得到 毫秒
Result := (QuadPart - QuadPart2) div 10000;
end;
end.
转载于:https://my.oschina.net/u/582827/blog/337408