Fórum placa de rede #269065
17/02/2005
0
Bigode
Curtir tópico
+ 0Posts
18/02/2005
Sanses
Se quer pegar o endereço dela não é? o MAC adress?
Se for faça assim coloque um buton e um label no seu form e declare esta função:
function GetMacAddress(const AServerName : string) : string; type TNetTransportEnum = function(pszServer : PWideChar; Level : DWORD; var pbBuffer : pointer; PrefMaxLen : LongInt; var EntriesRead : DWORD; var TotalEntries : DWORD; var ResumeHandle : DWORD) : DWORD; stdcall; TNetApiBufferFree = function(Buffer : pointer) : DWORD; stdcall; PTransportInfo = ^TTransportInfo; TTransportInfo = record quality_of_service : DWORD; number_of_vcs : DWORD; transport_name : PWChar; transport_address : PWChar; wan_ish : boolean; end; var E,ResumeHandle, EntriesRead, TotalEntries : DWORD; FLibHandle : THandle; sMachineName, sMacAddr, Retvar : string; pBuffer : pointer; pInfo : PTransportInfo; FNetTransportEnum : TNetTransportEnum; FNetApiBufferFree : TNetApiBufferFree; pszServer : array[0..128] of WideChar; i,ii,iIdx : integer; begin sMachineName := trim(AServerName); Retvar := ´00-00-00-00-00-00´; // Add leading \\ if missing if (sMachineName <> ´´) and (length(sMachineName) >= 2) then begin if copy(sMachineName,1,2) <> ´\\´ then sMachineName := ´\\´ + sMachineName end; // Setup and load from DLL pBuffer := nil; ResumeHandle := 0; FLibHandle := LoadLibrary(´NETAPI32.DLL´); // Execute the external function if FLibHandle <> 0 then begin @FNetTransportEnum := GetProcAddress(FLibHandle,´NetWkstaTransportEnum´); @FNetApiBufferFree := GetProcAddress(FLibHandle,´NetApiBufferFree´); E := FNetTransportEnum(StringToWideChar(sMachineName,pszServer,129),0, pBuffer,-1,EntriesRead,TotalEntries,Resumehandle); if E = 0 then begin pInfo := pBuffer; // Enumerate all protocols - look for TCPIP for i := 1 to EntriesRead do begin if pos(´TCPIP´,UpperCase(pInfo^.transport_name)) <> 0 then begin // Got It - now format result ´xx-xx-xx-xx-xx-xx´ iIdx := 1; sMacAddr := pInfo^.transport_address; for ii := 1 to 12 do begin Retvar[iIdx] := sMacAddr[ii]; inc(iIdx); if iIdx in [3,6,9,12,15] then inc(iIdx); end; end; inc(pInfo); end; if pBuffer <> nil then FNetApiBufferFree(pBuffer); end; try FreeLibrary(FLibHandle); except // Silent Error end; end; Result := Retvar; end;
Depois no evento click do botão :
edit1.text:=GetMacAddress(edit1.text);
Feito isso vc digita o nome do pc no edit e clica no botão, acho que pega até pela rede...
Se tiver um uso a respeito desta função, poste aqui pra que vai usar. Gostaria de saber qual a finalidade dela, pois tenho um aplicativo em rede e queria melhorar a conexão, mas não sei como usar o MAC address. Aguardo retorno
Sanses
Gostei + 0
18/02/2005
Bigode
Gostei + 0
18/02/2005
Sanses
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function GetMacAddress(const AServerName : string) : string;
type
TNetTransportEnum = function(pszServer : PWideChar;
Level : DWORD;
var pbBuffer : pointer;
PrefMaxLen : LongInt;
var EntriesRead : DWORD;
var TotalEntries : DWORD;
var ResumeHandle : DWORD) : DWORD; stdcall;
TNetApiBufferFree = function(Buffer : pointer) : DWORD; stdcall;
PTransportInfo = ^TTransportInfo;
TTransportInfo = record
quality_of_service : DWORD;
number_of_vcs : DWORD;
transport_name : PWChar;
transport_address : PWChar;
wan_ish : boolean;
end;
var E,ResumeHandle,
EntriesRead,
TotalEntries : DWORD;
FLibHandle : THandle;
sMachineName,
sMacAddr,
Retvar : string;
pBuffer : pointer;
pInfo : PTransportInfo;
FNetTransportEnum : TNetTransportEnum;
FNetApiBufferFree : TNetApiBufferFree;
pszServer : array[0..128] of WideChar;
i,ii,iIdx : integer;
begin
sMachineName := trim(AServerName);
Retvar := ´00-00-00-00-00-00´;
// Add leading \\ if missing
if (sMachineName <> ´´) and (length(sMachineName) >= 2) then begin
if copy(sMachineName,1,2) <> ´\\´ then
sMachineName := ´\\´ + sMachineName
end;
// Setup and load from DLL
pBuffer := nil;
ResumeHandle := 0;
FLibHandle := LoadLibrary(´NETAPI32.DLL´);
// Execute the external function
if FLibHandle <> 0 then begin
@FNetTransportEnum := GetProcAddress(FLibHandle,´NetWkstaTransportEnum´);
@FNetApiBufferFree := GetProcAddress(FLibHandle,´NetApiBufferFree´);
E := FNetTransportEnum(StringToWideChar(sMachineName,pszServer,129),0,
pBuffer,-1,EntriesRead,TotalEntries,Resumehandle);
if E = 0 then begin
pInfo := pBuffer;
// Enumerate all protocols - look for TCPIP
for i := 1 to EntriesRead do begin
if pos(´TCPIP´,UpperCase(pInfo^.transport_name)) <> 0 then begin
// Got It - now format result ´xx-xx-xx-xx-xx-xx´
iIdx := 1;
sMacAddr := pInfo^.transport_address;
for ii := 1 to 12 do begin
Retvar[iIdx] := sMacAddr[ii];
inc(iIdx);
if iIdx in [3,6,9,12,15] then inc(iIdx);
end;
end;
inc(pInfo);
end;
if pBuffer <> nil then FNetApiBufferFree(pBuffer);
end;
try
FreeLibrary(FLibHandle);
except
// Silent Error
end;
end;
Result := Retvar;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
edit1.text:=GetMacAddress(edit1.text);
end;
end.
NÃO se esqueça que voce tem que digitar o nome do computador no edit para que a função procure seu MAC Adress
Sanses
Gostei + 0
19/02/2005
Sanses
E ai amigo, funcionou agora??
Espero que sim...
Me diga qual a finalidade desta função, ou seja, em que ela vai ajudar, estou interessado...pois não encontrei nenhuma forma de utilizar essa informação no delphi. Obrigado!
Sanses
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)