Hier sind sie:
Als erstes die Deklarationen:
Code:
const
RAS_MaxDeviceType = 16;
RAS_MaxEntryName = 256;
RAS_MaxDeviceName = 128;
type
{$IFNDEF
UNICODE}
TCHAR = type Char;
{$ELSE}
TCHAR = type WideChar;
{$ENDIF}
RAS_STATS = packed record
dwSize : DWORD;
dwBytesXmited : DWORD;
dwBytesRcved : DWORD;
dwFramesXmited : DWORD;
dwFramesRcved : DWORD;
dwCrcErr : DWORD;
dwTimeoutErr : DWORD;
dwAlignmentErr : DWORD;
dwHardwareOverrunErr : DWORD;
dwFramingErr : DWORD;
dwBufferOverrunErr : DWORD;
dwCompressionRatioIn : DWORD;
dwCompressionRatioOut : DWORD;
dwBps : DWORD;
dwConnectDuration : DWORD;
end;
PRasConnA = ^PRasConn;
PRasConnW = ^PRasConn;
PRasConn = record
dwSize : DWORD;
hrasconn : DWORD;
szEntryName : array [0..RAS_MaxEntryName] of Char;
szDeviceType : array [0..RAS_MaxDeviceType] of Char;
szDeviceName : array [0..RAS_MaxDeviceName] of Char;
end;
dann die
API's:
Code:
function RasEnumConnections(var lprasconn : PRasConn; var lpcb : DWORD; var lpcconnections : DWORD) : DWORD; stdcall; external 'RasApi32.dll' name 'RasEnumConnectionsA';
function RasGetConnectionStatistics(const hRasConn : DWORD;const lpStatistics : RAS_STATS) : DWORD; stdcall; external 'RasApi32.dll';
und Aufgerufen wierd das ganze dann so:
Code:
Procedure GetSystemParams;
var Res,lpcb,NumberOfEntries :DWORD;
Entries :array[0..255] of PRasConn;
mystats :RAS_STATS;
i :DWORD;
begin
Entries[0].dwsize:=412;
lpcb:=256*Entries[0].dwsize;
NumberOfEntries:=0;
Res := RasEnumConnections(Entries[0], lpcb, NumberOfEntries);
if res <> 0 then exit;
mystats.dwsize:=sizeof(mystats);
if NumberOfEntries=0 then exit;
for i:=0 to NumberOfEntries-1 do begin
Res:= RasGetConnectionStatistics(Entries[i].hrasconn,mystats);
if Res=0 then begin
showmessage(inttostr(mystats.dwConnectDuration)); //Die Verbindungszeit in ms
end;
end;
end;
Die Zeit kann man dann recht einfach in minuten, stunden, tage, usw umrechnen. (nach ca. 42,2 Tagen beginnt der counter wieder bei 0, so lange sollte aber kein Windows laufen *g*)