如何检测网线被拔下、网卡被禁用?局域网内本机网络是否正常工作????

解决方案 »

  1.   

    右击“网上邻居”,看本地连接的状态,
    如果有个红色的X,表示网线被拔下,如果呈灰色,表示网卡被禁用。
    PING其他PC的IP,通则表示LAN是正常工作的
      

  2.   

    LOL。。好像回答都不合楼主本意 -_-!!!
      

  3.   

    uses WinInetprocedure TForm1.Button1Click(Sender: TObject);
    begin
      if InternetCheckConnection('http://www.csdn.net/', 1, 0) then
        edit1.text:= 'Connected'
      else
        edit1.text:= 'Disconnected';
    end;
      

  4.   

    anbeel(番薯好吃,但不宜多吃):
    这种方法我试过了不行的。
      

  5.   

    //参数:IpAddr:检测的IP地址 192.168.0.1
    //功能:检测网络是否正常
    Function Tfm_angel.CheckNet(IpAddr: string): Boolean;
    type        PIPOptionInformation = ^TIPOptionInformation;
            TIPOptionInformation = packed record
                    TTL: Byte; // Time To Live (used for traceroute)
                    TOS: Byte; // Type Of Service (usually 0)
                    Flags: Byte; // IP header flags (usually 0)
                    OptionsSize: Byte; // Size of options data (usually 0, max 40)
                    OptionsData: PChar; // Options data buffer
            end;        PIcmpEchoReply = ^TIcmpEchoReply;        TIcmpEchoReply = packed record                Address: DWord; // replying address
                    Status: DWord; // IP status value (see below)
                    RTT: DWord; // Round Trip Time in milliseconds
                    DataSize: Word; // reply data size
                    Reserved: Word;
                    Data: Pointer; // pointer to reply data buffer
                    Options: TIPOptionInformation; // reply options
            end;        TIcmpCreateFile = function: THandle; stdcall;
            TIcmpCloseHandle = function(IcmpHandle: THandle): Boolean; stdcall;
            TIcmpSendEcho = function(IcmpHandle: THandle;DestinationAddress: DWord;RequestData: Pointer;RequestSize: Word;RequestOptions: PIPOptionInformation;ReplyBuffer: Pointer;ReplySize: DWord;Timeout: DWord): DWord; stdcall;const
            Size = 32;
            TimeOut = 500;
    var        wsadata: TWSAData;
            Address: DWord; // Address of host to contact
            HostName, HostIP: String; // Name and dotted IP of host to contact
            Phe: PHostEnt; // HostEntry buffer for name lookup
            BufferSize, nPkts: Integer;
            pReqData, pData: Pointer;
            pIPE: PIcmpEchoReply; // ICMP Echo reply buffer
            IPOpt: TIPOptionInformation; // IP Options for packet to send
    const
            IcmpDLL = 'icmp.dll';
    var        hICMPlib: HModule;
            IcmpCreateFile : TIcmpCreateFile;
            IcmpCloseHandle: TIcmpCloseHandle;
            IcmpSendEcho: TIcmpSendEcho;
            hICMP: THandle; // Handle for the ICMP Calls
    begin
            // initialise winsock
            Result:=True;
            if WSAStartup(2,wsadata) <> 0 then
                   begin
                     Result:=False;
                     halt;
                   end;
            // register the icmp.dll stuff
            hICMPlib := loadlibrary(icmpDLL);
            if hICMPlib <> null then
               begin
                    @ICMPCreateFile := GetProcAddress(hICMPlib, 'IcmpCreateFile');
                    @IcmpCloseHandle:= GetProcAddress(hICMPlib, 'IcmpCloseHandle');
                    @IcmpSendEcho:= GetProcAddress(hICMPlib, 'IcmpSendEcho');
                    if (@ICMPCreateFile = Nil) or (@IcmpCloseHandle = Nil) or (@IcmpSendEcho = Nil) then
                        begin
                            Result:=False;
                            halt;
                        end;
                    hICMP := IcmpCreateFile;
                    if hICMP = INVALID_HANDLE_VALUE then
                        begin
                           Result:=False;
                           halt;
                        end;
               end
            else
               begin
                    Result:=False;
                    halt;
               end;
    // ------------------------------------------------------------        Address := inet_addr(PChar(IpAddr));
            if (Address = INADDR_NONE) then
                begin
                    Phe := GetHostByName(PChar(IpAddr));
                    if Phe = Nil then
                        Result:=False
                    else
                      begin
                            Address := longint(plongint(Phe^.h_addr_list^)^);
                            HostName := Phe^.h_name;
                            HostIP := StrPas(inet_ntoa(TInAddr(Address)));
                      end;
                end
             else
                begin                Phe := GetHostByAddr(@Address, 4, PF_INET);
                    if Phe = Nil then Result:=False;
                end;
            if Address = INADDR_NONE then
                begin
                    Result:=False;
                end;
            // Get some data buffer space and put something in the packet to send
            BufferSize := SizeOf(TICMPEchoReply) + Size;   //
            GetMem(pReqData, Size);
            GetMem(pData, Size);
            GetMem(pIPE, BufferSize);
            FillChar(pReqData^, Size, $AA);
            pIPE^.Data := pData;
            // Finally Send the packet
            FillChar(IPOpt, SizeOf(IPOpt), 0);
            IPOpt.TTL := 64;
            NPkts := IcmpSendEcho(hICMP, Address, pReqData, Size,
            @IPOpt, pIPE, BufferSize, TimeOut);
            if NPkts = 0 then Result:=False;
            // Free those buffers
            FreeMem(pIPE); FreeMem(pData); FreeMem(pReqData);
            // --------------------------------------------------------------
            IcmpCloseHandle(hICMP);
            FreeLibrary(hICMPlib);
            // free winsock
            if WSACleanup <> 0 then Result:=False;
    end;