![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
MAC-адрес [D7, Win95/98, WinME, NT4, Win2k, WinXP]
apic © (2006-08-15 17:30:00)Как узнать MAC-адрес сетевухи, программно разумеется...
Заранее СПАСИБО!!!
Микс (2006-10-26 11:31:00) [1]Falcao всё в норме, не надо меня поссылать в такую дать, бывает торможу. Праздники всякие мешаю работе =))
Falcao (2006-10-25 10:03:00) [2]Микс, если ты не знаешь что такое Мемо1 и как исправить "Desc_ription"(читай внимательнее весь тот топик!).... то ... тебе очень трудно будет помочь. Начни с азов программирования/проектирования в RAD-системе Borland C++ Builder (VCL Win32) :D .
Микс, обсуждение того кода должно вестись там, где он собссно есть.
___
Уважаемые учаснеги ДельфиМастер, прошу прощения...
Микс (2006-10-24 23:57:00) [3]Очень много ошибок в этом коде
[C++ Error] Unit1.cpp(58): E2451 Undefined symbol 'Memo1'
[C++ Error] Unit1.cpp(59): E2316 'Desc_ription' is not a member of '_IP_ADAPTER_INFO'
[C++ Warning] Unit1.cpp(61): W8012 Comparing signed and unsigned values
[C++ Error] Unit1.cpp(70): E2134 Compound statement missing }
[C++ Warning] Unit1.cpp(70): W8070 Function should return a value
Falcao (2006-10-24 21:53:00) [4]"есть гараздо удобнее функции..." - точнее, наверное, СПОСОБЫ=)
Например, через getsockopt, Netbios(NCB *).
Микс, а на МСДН зайти лень? =)))
Вот рабочий пример :Р
http://www.sysman.ru/index.php?showtopic=7350
Микс (2006-10-24 18:02:00) [5]piople ты помочь можешь с С++ Builder ?
piople (2006-10-24 09:21:00) [6]есть гараздо удобнее функции...
Микс (2006-10-22 22:43:00) [7]А вы не могли бы написать как в С++ Builder это выглядит?
apic (2006-08-17 18:01:00) [8]Отец Кондратий, ты "красавчик"!
Отец Кондратий (2006-08-16 06:14:00) [9]Без проблем. Есть несколько возможных реализаций. Вот одна, может не самая лучшая, но позволяет узнать всё про все адаптеры:
uses Windows, IpHlpAPI, WinSock2, IpRtrMib, Iptypes, IpIfConst;
...
type
// Структуры для выполнения GetAdaptersInfo
IP_ADDRESS_STRING = record
S: array [0..15] of Char;
end;
IP_MASK_STRING = IP_ADDRESS_STRING;
PIP_MASK_STRING = ^IP_MASK_STRING;
PIP_ADDR_STRING = ^IP_ADDR_STRING;
IP_ADDR_STRING = record
Next: PIP_ADDR_STRING; // Pointer to the next IP_ADDR_STRING structure in the list.
IpAddress: IP_ADDRESS_STRING; // Specifies a structure type with a single member, String.
// The String member is a char array of size 16. This array holds the IP address.
IpMask: IP_MASK_STRING; // Specifies a structure type with a single member, String.
//The String member is a char array of size 16. This array holds
//the IP address mask.
Context: DWORD; // Network table entry (NTE). This value corresponds to the NTEContext
//parameters in the AddIPAddress and DeleteIPAddress functions.
end;
...
type
PIP_ADAPTER_INFO = ^IP_ADAPTER_INFO;
IP_ADAPTER_INFO = record
Next: PIP_ADAPTER_INFO; //Pointer to the next adapter in the list of adapters.
ComboIndex: DWORD; //Reserved.
AdapterName: array [0..MAX_ADAPTER_NAME_LENGTH + 3] of Char; //Name of the adapter.
Description: array [0..MAX_ADAPTER_DESCRIPTION_LENGTH + 3] of Char; //Description for the adapter.
AddressLength: UINT; //Length of the hardware address for the adapter.
Address: array [0..MAX_ADAPTER_ADDRESS_LENGTH - 1] of BYTE; //Hardware address for the adapter.
Index: DWORD; // Adapter index. The adapter index may change when an adapter is
//disabled and then enabled, or under other circumstances,
//and should not be considered persistent.
Type_: UINT; // Adapter type. The type must be of the following values:
// MIB_IF_TYPE_OTHER
// MIB_IF_TYPE_ETHERNET
// MIB_IF_TYPE_TOKENRING
// MIB_IF_TYPE_FDDI
// MIB_IF_TYPE_PPP
// MIB_IF_TYPE_LOOPBACK
// MIB_IF_TYPE_SLIP
// These values are defined in the header file IPIfCons.h.
DhcpEnabled: UINT; // Specifies whether dynamic host configuration protocol
//(DHCP) is enabled for this adapter.
CurrentIpAddress: PIP_ADDR_STRING; // Reserved.
IpAddressList: IP_ADDR_STRING; // List of IP addresses associated with this adapter.
GatewayList: IP_ADDR_STRING; // IP address of the default gateway for this adapter.
DhcpServer: IP_ADDR_STRING; // IP address of the DHCP server for this adapter. A value of
//255.255.255.255 indicates the DHCP server could not be reached,
// or is in the process of being reached.
HaveWins: BOOL; // Specifies whether this adapter uses Windows Internet Name Service (WINS).
PrimaryWinsServer: IP_ADDR_STRING; // IP address of the primary WINS server.
SecondaryWinsServer: IP_ADDR_STRING; // IP address of the secondary WINS server.
LeaseObtained: time_t; // Time when the current DHCP lease was obtained.
LeaseExpires: time_t; // Time when the current DHCP lease expires.
end;
function GetAdaptersInfo(pAdapterInfo: PIP_ADAPTER_INFO; var pOutBufLen: ULONG): DWORD;stdcall; external 'iphlpapi.dll';
...
...
function PhysAddrToString(Length: DWORD; PhysAddr: TPhysAddrByteArray): string;
var
I: Integer;
begin
Result := '';
if Length = 0
then Exit;
for I := 0 to Length - 1 do
if I = Integer(Length - 1)
then Result := Result + Format('%.2x', [PhysAddr[I]])
else Result := Result + (Format('%.2x-', [PhysAddr[I]]));
end;
function EnumAdapters:Integer;
var Size:ULONG;
Adapter,Adapters:PIP_ADAPTER_INFO;
IP:PIP_ADDR_STRING;
IPAddress:String;
begin
Result := 0;
Size := 0;
MForm.AdapterBox.Items.Clear;
MForm.IPAddressBox.Items.Clear;
MForm.NICindex.Items.Clear;
if GetAdaptersInfo(nil,Size) <> ERROR_BUFFER_OVERFLOW
then Exit;
Adapters := AllocMem(Size);
TRY
if GetAdaptersInfo(Adapters,Size) = NO_ERROR
then begin
Adapter := Adapters;
while Adapter <> nil do
begin
if Adapter.Type_ = MIB_IF_TYPE_ETHERNET // Ну или какую там тебе надо...
then begin
IP := @Adapter.IpAddressList;
MForm.NICindex.Items.Add(IntToStr(Adapter.Index));
IPAddress := '';
repeat
IPAddress := IPAddress + (Format('%s ',[IP^.IpAddress.S]));
IP := IP.Next;
until IP = nil;
MForm.AdapterBox.Items.Add(Adapter.AdapterName);
MForm.DescAdapterBox.Items.Add(Adapter.Description);
MForm.IPAddressBox.Items.Add(IPAddress);
MForm.MACbox.Items.Add(PhysAddrToString(6, TPhysAddrByteArray(Adapter.Address)));
Inc(Result);
end;
Adapter := Adapter^.Next;
end;
end;
FINALLY
FreeMem(Adapters);
END;
end;
А вообще тут много раз уже проскакивали подобные запросы... Всех отправляли RTFM.