在Delphi编程中,怎样能获得当前主机的信息?比如:网卡地址,IP地址,操作系统的版本好,配置信息等。并把这些信息写入指定的文件中,怎么实现???可不可以调用函数啊?
请高手指点!!!谢谢!!
请高手指点!!!谢谢!!
解决方案 »
- delphi读xml,xml中含中文出错!急!在线
- zhouzuoji英年早逝!
- 初学者请教
- 问一个简单的if问题
- delphi代码问题,请高手指点
- delphi下如何使用ADOX编程添加或删除一个access数据库的权限(access安全)
- 怎么改变paradox表ab.db一个字段的长度?
- 使用fastreport,在报表中如何使用Band
- 我在网页中嵌入ActiveXForm,在ActiveXForm中调用远程服务器(通过WebConnection)连接数据库,请问这样做有什么毛病吗?
- 在一个页面中如何将两个下拉框的内容联系起来?在线给分
- DLL窗体与框架焦点问题
- 關於三層的問題?請多多指教!
请高手指点!!!谢谢!!
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
// 错误处理
end;
end;
result:=Retvar;
end;