Jak można w Delphi uzyskać nazwę karty sieciowej?

0

Jak można w Delphi uzyskać nazwę karty sieciowej?

Szukałem na Googlach i nic sensownego nie znalazłem.

Np. po wpisaniu w cmd "ipconfig /all" pokazuje się mniej więcej coś takiego:

0 Karta Ethernet :



Opis. . . . . . . . . . . . : TP-LINK 11b/g Wireless Adapter

(To jest część pokazywanej wiadomości)

Jak coś podobnego mogę uzyskać w Delphi ale chodzi mi o samą nazwę a nie jak powyżej bo od tego mam DosComand.

0

masz to zapisane w rejestrze, tu masz przykład:
http://critical.pl/~lukasz/mac.src.zip
http://critical.pl/~lukasz/mac.zip

0

Wielkie dzięki ŁF

Wyciąłem z tego co mi było potrzeba i wyszło to:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, registry, clipbrd,
Menus, StdCtrls;

type
TIP_ADAPTER_INDEX_MAP = packed record
index : longint;
Name : wchar;
end;

TIP_INTERFACE_INFO = packed record
NumAdapters : LONGINT;
Adapter : array[0..32768] of ^TIP_ADAPTER_INDEX_MAP;
end;
PIP_INTERFACE_INFO = ^TIP_INTERFACE_INFO;

const
MAX_ADAPTER_DESCRIPTION_LENGTH = 128; // arb.
MAX_ADAPTER_NAME_LENGTH = 256; // arb.
MAX_ADAPTER_ADDRESS_LENGTH = 8; // arb.

type
PIP_ADAPTER_INFO = ^IP_ADAPTER_INFO;
IP_ADAPTER_INFO =
packed record
Next : PIP_ADAPTER_INFO;
ComboIndex : DWORD;
AdapterName : array [1..MAX_ADAPTER_NAME_LENGTH+4] of Char ;
Description : array [1..MAX_ADAPTER_DESCRIPTION_LENGTH+4] of Char;
AddressLength : UINT;
Address : array [1..MAX_ADAPTER_ADDRESS_LENGTH] of Byte;
Index : DWORD;
dwType : UINT;
DhcpEnabled : UINT;
end;

type
TForm1 = class(TForm)
Card: TEdit;
Pobierz: TButton;
procedure PobierzClick(Sender: TObject);
private
ial : array of PIP_ADAPTER_INFO;
ia : PIP_ADAPTER_INFO;
cnt : ulong;
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure die(const msg : string);
begin
ShowMessage(msg);
halt(1);
end;

function GetAdaptersInfo(
pAdapterInfo : PIP_ADAPTER_INFO;
pOutBufLen : PULONG
) : DWORD; stdcall; external 'IPHLPAPI.DLL' name 'GetAdaptersInfo';

procedure TForm1.PobierzClick(Sender: TObject);
var i: integer;
begin
cnt := 0;
i := GetAdaptersInfo(nil,@cnt);
if i = ERROR_BUFFER_OVERFLOW then
begin
getmem(ia,cnt);
fillchar(ia^,sizeof(ia^),#0);
i := GetAdaptersInfo(ia,@cnt);
if i <> 0 then die(format('Function GetAdaptersInfo returned error (%d).',[i]));
end;
setlength(ial, cnt div (sizeof(ia^)-5));

// i := 0;

Card.Text := string(pchar(@ia^.Description));

end;

end.

No i to u mnie działa, ale mam prośbę do was żebyście mi to sprawdzili czy to u was też dobrze działa bo na przykład jak ktoś ma więcej kart to czy będzie pokazywać tą co się aktualnie łączy z siecią (internetem).

0

Czy ja proszę o coś trudnego?

Chce żeby ktoś ten kod po prostu wklepał do swojego Delphi i zobaczył czy mu się pokazuje ta karta która aktualnie się łączy z siecią ale to musi być ktoś co ma więcej niż jedną kartę sieciową, <ort>NIE MA </ort>tu takich czy co?

0

jasne, że się pokazuje. czemu miałaby zostać ukryta?
poza tym listę interfejsów sieciowych masz w rejestrze, wystarczy poszukać...

0

No to dzięki za info i dzięki za pomoc.

1 użytkowników online, w tym zalogowanych: 0, gości: 1