请问 delphi下 如何获取 网卡的持续连接时间 

解决方案 »

  1.   

    查到要用 RasGetConnectionStatistics api函数,具体的你再找找吧
      

  2.   

    Use Nb30
    //TADAPTERSTATUS 里的duration应该就是连续连接时间,参考获取MAC地址(就是TADAPTERSTATUS 的adapter_address)的方法,来获取duration,没成功我获得的都是0,不知道怎么回事function TForm1.NBGetAdapterAddress(a: integer): string; 
    //a指定多个网卡适配器中的哪一个0,1,2... 
    var 
    NCB: TNCB; // Netbios control block file://NetBios控制块 
    ADAPTER: TADAPTERSTATUS; // Netbios adapter status//取网卡状态 
    LANAENUM: TLANAENUM; // Netbios lana 
    i: Integer; // Temporary work value//临时变量 
    cRC: Char; // Netbios return code//NetBios返回值 
    strTemp: string; // Temporary string//临时变量 begin 
    // Initialize 
    Result := ''; try 
    // Zero control blocl 
    ZeroMemory(@NCB, SizeOf(NCB)); // Issue enum command 
    NCB.ncb_command := Chr(NCBENUM); 
    cRC := NetBios(@NCB); // Reissue enum command 
    NCB.ncb_buffer := @LANAENUM; 
    NCB.ncb_length := SizeOf(LANAENUM); 
    cRC := NetBios(@NCB); 
    if Ord(cRC) <> 0 then 
             exit;       // Reset adapter 
          ZeroMemory(@NCB, SizeOf(NCB)); 
          NCB.ncb_command := Chr(NCBRESET); 
          NCB.ncb_lana_num := LANAENUM.lana[a]; 
          cRC := NetBios(@NCB); 
          if Ord(cRC) <> 0 then 
             exit;       // Get adapter address 
          ZeroMemory(@NCB, SizeOf(NCB)); 
          NCB.ncb_command := Chr(NCBASTAT); 
          NCB.ncb_lana_num := LANAENUM.lana[a]; 
          StrPCopy(NCB.ncb_callname, '*'); 
          NCB.ncb_buffer := @ADAPTER; 
          NCB.ncb_length := SizeOf(ADAPTER); 
          cRC := NetBios(@NCB);       // Convert it to string 
          strTemp := ''; 
          for i := 0 to 5 do 
             strTemp := strTemp + InttoHex(Integer(ADAPTER.adapter_address[i]), 2); 
          //ADAPTER.duration;我得到的总是0,不知何故
          Result := strTemp; 
       finally 
       end; end; 
      

  3.   

    自己動手試試看:
    ///取MAC(非集成網卡):function NBGetAdapterAddress(a: Integer): string;
    var
    NCB: TNCB; // Netbios control block //NetBios控制塊
    ADAPTER: TADAPTERSTATUS; // Netbios adapter status//取網卡狀態
    LANAENUM: TLANAENUM; // Netbios lana
    intIdx: Integer; // Temporary work value//臨時變數
    cRC: Char; // Netbios return code//NetBios返回值
    strTemp: string; // Temporary string//臨時變數
    begin
    // Initialize
    Result := '';
    try
        // Zero control blocl
        ZeroMemory(@NCB, SizeOf(NCB));
        // Issue enum command
        NCB.ncb_command := Chr(NCBENUM);
        cRC := NetBios(@NCB);
        // Reissue enum command
        NCB.ncb_buffer := @LANAENUM;
        NCB.ncb_length := SizeOf(LANAENUM);
        cRC := NetBios(@NCB);
        if ord(cRC) <> 0 then
          exit;
        // Reset adapter
        ZeroMemory(@NCB, SizeOf(NCB));
        NCB.ncb_command := Chr(NCBRESET);
        NCB.ncb_lana_num := LANAENUM.lana[a];
        cRC := NetBios(@NCB);
        if ord(cRC) <> 0 then
          exit;
        // Get adapter address
        ZeroMemory(@NCB, SizeOf(NCB));
        NCB.ncb_command := Chr(NCBASTAT);
        NCB.ncb_lana_num := LANAENUM.lana[a];
        StrPCopy(NCB.ncb_callname, '*');
        NCB.ncb_buffer := @ADAPTER;
        NCB.ncb_length := SizeOf(ADAPTER);
        cRC := NetBios(@NCB);
        // Convert it to string
        strTemp := '';
        for intIdx := 0 to 5 do
          strTemp := strTemp + InttoHex(Integer(ADAPTER.adapter_address[intIdx]), 2);
        Result := strTemp;
    finally
    end;
    end;
    //==========================================================================
    //取MAC位址(集成網卡和非集成網卡):function Getmac:string;
    var
    ncb : TNCB;
    s:string;
    adapt : TASTAT;
    lanaEnum : TLanaEnum;
    i, j, m : integer;
    strPart, strMac : string;
    begin
    FillChar(ncb, SizeOf(TNCB), 0);
    ncb.ncb_command := Char(NCBEnum);
    ncb.ncb_buffer := PChar(@lanaEnum);
    ncb.ncb_length := SizeOf(TLanaEnum);
    s:=Netbios(@ncb);
    for i := 0 to integer(lanaEnum.length)-1 do
    begin
        FillChar(ncb, SizeOf(TNCB), 0);
        ncb.ncb_command := Char(NCBReset);
        ncb.ncb_lana_num := lanaEnum.lana[i];
        Netbios(@ncb);
        Netbios(@ncb);
        FillChar(ncb, SizeOf(TNCB), 0);
        ncb.ncb_command := Chr(NCBAstat);
        ncb.ncb_lana_num := lanaEnum.lana[i];
        ncb.ncb_callname := '*               ';
        ncb.ncb_buffer := PChar(@adapt);
        ncb.ncb_length := SizeOf(TASTAT);
        m:=0;
        if (Win32Platform = VER_PLATFORM_WIN32_NT) then
        m:=1;
        if m=1 then
        begin
        if Netbios(@ncb) = Chr(0) then
          strMac := '';
          for j := 0 to 5 do
          begin
            strPart := IntToHex(integer(adapt.adapter.adapter_address[j]), 2);
            strMac := strMac + strPart + '-';
          end;
          SetLength(strMac, Length(strMac)-1);
        end;
    if m=0 then
        if Netbios(@ncb) <> Chr(0) then
        begin
          strMac := '';
          for j := 0 to 5 do
          begin
            strPart := IntToHex(integer(adapt.adapter.adapter_address[j]), 2);
            strMac := strMac + strPart + '-';
          end;
          SetLength(strMac, Length(strMac)-1);
        end;
    end;
    result:=strmac;
    end;function PartitionString(StrV,PrtSymbol: string): TStringList;
    var
    iTemp: integer;
    begin
    result := TStringList.Create;
    iTemp := pos(PrtSymbol,StrV);
    while iTemp>0 do begin
        if iTemp>1 then result.Append(copy(StrV,1,iTemp-1));
        delete(StrV,1,iTemp+length(PrtSymbol)-1);
        iTemp := pos(PrtSymbol,StrV);
    end;
    if Strv<>'' then result.Append(StrV);
    end;function MacStr():String;
    var
    Str:TStrings;
    i:Integer;
    MacStr:String;
    begin
    MacStr:='';
    Str:=TStringList.Create;
    Str:=PartitionString(Getmac,'-');
    for i:=0 to Str.Count-1 do
        MacStr:=MacStr+Str[i];
    Result:=MacStr;
    end;//==============================================
    //調用示例
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    Edit3.Text:=strpas(GetIdeSerialNumber);//取硬碟號
    Edit2.text:=GetCPUIDStr;//CPU系列號
    edit4.Text:=NBGetAdapterAddress(12);//非集成網卡
    Edit1.text:=MacStr;//集成和非集成網卡end;
    通過ADAPTER: TADAPTERSTATUS; // Netbios adapter status//取網卡狀態
    取得網卡的狀態(可知網卡的連接狀態)可做一個標識status,然後根據status得到持續連接時間...