WIN7 64位系統,用D7 怎么判斷本地連接網卡的狀態,如是禁用狀態,還是開啟狀態?
uj5u.com熱心網友回復:
沒測驗哈,網上找的。unit AdpUtils;
interface
uses Windows;
const
MAX_INTERFACE_NAME_LEN = 256;
MAXLEN_PHYSADDR = 8;
MAXLEN_IFDESCR = 256;
MIB_IF_TYPE_OTHER = 1;
MIB_IF_TYPE_ETHERNET = 6;
MIB_IF_TYPE_TOKENRING = 9;
MIB_IF_TYPE_FDDI = 15;
MIB_IF_TYPE_PPP = 23;
MIB_IF_TYPE_LOOPBACK = 24;
MIB_IF_TYPE_SLIP = 28;
MIB_IF_ADMIN_STATUS_UP = 1;
MIB_IF_ADMIN_STATUS_DOWN = 2;
MIB_IF_ADMIN_STATUS_TESTING = 3;
MIB_IF_OPER_STATUS_NON_OPERATIONAL = 0;
MIB_IF_OPER_STATUS_UNREACHABLE = 1;
MIB_IF_OPER_STATUS_DISCONNECTED = 2;
MIB_IF_OPER_STATUS_CONNECTING = 3;
MIB_IF_OPER_STATUS_CONNECTED = 4;
MIB_IF_OPER_STATUS_OPERATIONAL = 5;
type
MIB_PHYSADDR = array[0..MAXLEN_PHYSADDR - 1] of Byte;
MIB_IFDESCR = array[0..MAXLEN_IFDESCR - 1] of Char;
PMIB_IFROW = ^MIB_IFROW;
MIB_IFROW = packed record
wszName: array[0..MAX_INTERFACE_NAME_LEN - 1] of WCHAR;
dwIndex,
dwType,
dwMtu,
dwSpeed,
dwPhysAddrLen: DWORD;
bPhysAddr: MIB_PHYSADDR;
dwAdminStatus,
dwOperStatus,
dwLastChange,
dwInOctets,
dwInUcastPkts,
dwInNUcastPkts,
dwInDiscards,
dwInErrors,
dwInUnknownProtos,
dwOutOctets,
dwOutUcastPkts,
dwOutNUcastPkts,
dwOutDiscards,
dwOutErrors,
dwOutQLen,
dwDescrLen: DWORD;
bDescr: MIB_IFDESCR;
end;
PMIB_IFTABLE = ^MIB_IFTABLE;
MIB_IFTABLE = packed record
dwNumEntries: DWORD;
table: array[0..0] of MIB_IFROW;
end;
TAdapterStatus = record
dwType,
dwOperStatus: DWORD;
bDescr: MIB_IFDESCR;
end;
TAdapterStatuses = array of TAdapterStatus;
function GetIfTable(pIfTable: PMIB_IFTABLE; pdwSize: PULONG; bOrder: BOOL): DWORD;
stdcall; external 'iphlpapi.dll';
function GetAdapterTypeString(const dwType: DWORD): string;
function GetGetAdapterStatusString(const dwOperStatus: DWORD): string;
procedure ScanAdapters(var AdapterStatuses: TAdapterStatuses);
implementation
var
dwSize: DWORD;
pMibIfTable: PMIB_IFTABLE;
function GetAdapterTypeString(const dwType: DWORD): string;
begin
case dwType of
MIB_IF_TYPE_OTHER: Result := '其他';
MIB_IF_TYPE_ETHERNET: Result := '以太網';
MIB_IF_TYPE_TOKENRING: Result := '令牌環';
MIB_IF_TYPE_FDDI: Result := 'FDDI';
MIB_IF_TYPE_PPP: Result := 'PPP';
MIB_IF_TYPE_LOOPBACK: Result := '回路';
MIB_IF_TYPE_SLIP: Result := 'SLIP';
end;
end;
function GetGetAdapterStatusString(const dwOperStatus: DWORD): string;
begin
case dwOperStatus of
MIB_IF_OPER_STATUS_NON_OPERATIONAL: Result := '掉線';
MIB_IF_OPER_STATUS_UNREACHABLE: Result := '不可達';
MIB_IF_OPER_STATUS_DISCONNECTED: Result := '斷開';
MIB_IF_OPER_STATUS_CONNECTING: Result := '連接中';
MIB_IF_OPER_STATUS_CONNECTED: Result := '已連接';
MIB_IF_OPER_STATUS_OPERATIONAL: Result := '連通';
end;
end;
procedure ScanAdapters(var AdapterStatuses: TAdapterStatuses);
var
dwRetVal: DWORD;
num, i: Longint;
begin
dwRetVal := GetIfTable(pMibIfTable, @dwSize, False);
if dwRetVal = NO_ERROR then
begin
num := pMibIfTable^.dwNumEntries;
if Length(AdapterStatuses) <> num then
SetLength(AdapterStatuses, num);
for i := Low(AdapterStatuses) to High(AdapterStatuses) do
begin
AdapterStatuses[i].dwType := pMibIfTable^.table[i].dwType;
AdapterStatuses[i].dwOperStatus := pMibIfTable^.table[i].dwOperStatus;
AdapterStatuses[i].bDescr := pMibIfTable^.table[i].bDescr;
end;
end;
end;
initialization
GetIfTable(nil, @dwSize, False);
GetMem(pMibIfTable, dwSize);
finalization
FreeMem(pMibIfTable);
end.
http://blog.csdn.net/avan_lau/article/details/17118619
http://www.delphitop.com/html/wangluo/190.html
uj5u.com熱心網友回復:
樓上網上由來,無Dll。不可用的。uj5u.com熱心網友回復:
謝邀的確64位下許多函式都沒什么卵用
以下代碼只能識別啟用的網卡 win7 64位可用
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, CheckLst;
const
MAX_HOSTNAME_LEN = 128; { from IPTYPES.H }
MAX_DOMAIN_NAME_LEN = 128;
MAX_SCOPE_ID_LEN = 256;
MAX_ADAPTER_NAME_LENGTH = 256;
MAX_ADAPTER_DESCRIPTION_LENGTH = 128;
MAX_ADAPTER_ADDRESS_LENGTH = 8;
type
TIPAddressString = array[0..4*4-1] of Char;
PIPAddrString = ^TIPAddrString;
TIPAddrString = Record
Next : PIPAddrString;
IPAddress : TIPAddressString;
IPMask : TIPAddressString;
Context : Integer;
end;
PIPAdapterInfo = ^TIPAdapterInfo;
TIPAdapterInfo = Record { IP_ADAPTER_INFO }
Next : PIPAdapterInfo;
ComboIndex : Integer;
AdapterName : Array[0..MAX_ADAPTER_NAME_LENGTH+3] of Char;
Description : Array[0..MAX_ADAPTER_DESCRIPTION_LENGTH+3] of Char;
AddressLength : Integer;
Address : Array[1..MAX_ADAPTER_ADDRESS_LENGTH] of Byte;
Index : Integer;
_Type : Integer;
DHCPEnabled : Integer;
CurrentIPAddress : PIPAddrString;
IPAddressList : TIPAddrString;
GatewayList : TIPAddrString;
DHCPServer : TIPAddrString;
HaveWINS : Bool;
PrimaryWINSServer : TIPAddrString;
SecondaryWINSServer : TIPAddrString;
LeaseObtained : Integer;
LeaseExpires : Integer;
end;
TForm1 = class(TForm)
clbDevList: TCheckListBox;
lblDev: TLabel;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
procedure GetNetWork();
public
{ Public declarations }
end;
var
Form1: TForm1;
function GetAdaptersInfo(AI : PIPAdapterInfo; var BufLen : Integer) : Integer;
stdcall; external 'iphlpapi.dll' Name 'GetAdaptersInfo';
implementation
{$R *.dfm}
{ TForm1 }
procedure TForm1.GetNetWork;
var
AI, Work: PIPAdapterInfo;
nRe, nSize, i: Integer;
begin
clbDevList.Clear();
nSize := 5120;
GetMem(AI, nSize);
for i:=0 to clbDevList.Count-1 do
clbDevList.Checked[i] := False;
try
nRe := GetAdaptersInfo(AI, nSize);
if nRe <> ERROR_SUCCESS then Exit;
Work := AI;
Repeat
clbDevList.Items.Add(Work^.Description);
Work := Work^.Next;
Until (Work = nil);
finally
FreeMem(AI);
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
GetNetWork();
end;
end.
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/78873.html
標籤:網絡通信/分布式開發
