查找所有网络计算机
调用FindComputers,返回WinAPI错误代码(如果有的话)。这个函数将会在TStringList类型的Computers对象中填入计算机名称。 以下代码是在Delphi5上开发的,但是应该是向后兼容的。 Answer: unit FindComp; interface uses Windows, Classes; function FindComputers: DWORD; var Computers: TStringList; implementation uses SysUtils; const MaxEntries = 250; function FindComputers: DWORD; var EnumWorkGroupHandle, EnumComputerHandle: THandle; EnumError: DWORD; Network: TNetResource; WorkGroupEntries, ComputerEntries: DWORD; EnumWorkGroupBuffer, EnumComputerBuffer: array[1..MaxEntries] of TNetResource; EnumBufferLength: DWORD; I, J: DWORD; begin Computers.Clear; FillChar(Network, SizeOf(Network), 0); with Network do begin dwScope := RESOURCE_GLOBALNET; dwType := RESOURCETYPE_ANY; dwUsage := RESOURCEUSAGE_CONTAINER; end; EnumError := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, @Network, EnumWorkGroupHandle); if EnumError = NO_ERROR then begin WorkGroupEntries := MaxEntries; EnumBufferLength := SizeOf(EnumWorkGroupBuffer); EnumError := WNetEnumResource(EnumWorkGroupHandle, WorkGroupEntries, @EnumWorkGroupBuffer, EnumBufferLength); if EnumError = NO_ERROR then begin for I := 1 to WorkGroupEntries do begin EnumError := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, @EnumWorkGroupBuffer[I], EnumComputerHandle); if EnumError = NO_ERROR then begin ComputerEntries := MaxEntries; EnumBufferLength := SizeOf(EnumComputerBuffer); EnumError := WNetEnumResource(EnumComputerHandle, ComputerEntries, @EnumComputerBuffer, EnumBufferLength); if EnumError = NO_ERROR then for J := 1 to ComputerEntries do Computers.Add(Copy(EnumComputerBuffer[J].lpRemoteName, 3, Length(EnumComputerBuffer[J].lpRemoteName) - 2)); WNetCloseEnum(EnumComputerHandle); end; end; end; WNetCloseEnum(EnumWorkGroupHandle); end; if EnumError = ERROR_NO_MORE_ITEMS then EnumError := NO_ERROR; Result := EnumError; end; initialization Computers := TStringList.Create; finalization Computers.Free; end.
调用FindComputers,返回WinAPI错误代码(如果有的话)。这个函数将会在TStringList类型的Computers对象中填入计算机名称。 以下代码是在Delphi5上开发的,但是应该是向后兼容的。 Answer: unit FindComp; interface uses Windows, Classes; function FindComputers: DWORD; var Computers: TStringList; implementation uses SysUtils; const MaxEntries = 250; function FindComputers: DWORD; var EnumWorkGroupHandle, EnumComputerHandle: THandle; EnumError: DWORD; Network: TNetResource; WorkGroupEntries, ComputerEntries: DWORD; EnumWorkGroupBuffer, EnumComputerBuffer: array[1..MaxEntries] of TNetResource; EnumBufferLength: DWORD; I, J: DWORD; begin Computers.Clear; FillChar(Network, SizeOf(Network), 0); with Network do begin dwScope := RESOURCE_GLOBALNET; dwType := RESOURCETYPE_ANY; dwUsage := RESOURCEUSAGE_CONTAINER; end; EnumError := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, @Network, EnumWorkGroupHandle); if EnumError = NO_ERROR then begin WorkGroupEntries := MaxEntries; EnumBufferLength := SizeOf(EnumWorkGroupBuffer); EnumError := WNetEnumResource(EnumWorkGroupHandle, WorkGroupEntries, @EnumWorkGroupBuffer, EnumBufferLength); if EnumError = NO_ERROR then begin for I := 1 to WorkGroupEntries do begin EnumError := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, @EnumWorkGroupBuffer[I], EnumComputerHandle); if EnumError = NO_ERROR then begin ComputerEntries := MaxEntries; EnumBufferLength := SizeOf(EnumComputerBuffer); EnumError := WNetEnumResource(EnumComputerHandle, ComputerEntries, @EnumComputerBuffer, EnumBufferLength); if EnumError = NO_ERROR then for J := 1 to ComputerEntries do Computers.Add(Copy(EnumComputerBuffer[J].lpRemoteName, 3, Length(EnumComputerBuffer[J].lpRemoteName) - 2)); WNetCloseEnum(EnumComputerHandle); end; end; end; WNetCloseEnum(EnumWorkGroupHandle); end; if EnumError = ERROR_NO_MORE_ITEMS then EnumError := NO_ERROR; Result := EnumError; end; initialization Computers := TStringList.Create; finalization Computers.Free; end.
解决方案 »
- 关于内存释放问题
- 为什么我open一个表就报'name not unique in this context'
- delphi 怎么把两个。MPG 合成一个?
- WIN2000下局域网内广播消息的实现
- DcomConnection控件问题
- 请问大家用的是delphi5还是6,我该学哪个版本?
- 可以按住ctrl键选中多个的控件
- 怎样使opendialog中只显示以制表符号分隔的文本文件。
- 求教:程序执行中如何重新运行自身?
- 关于李维《电子商务篇》中的一个例子。It's easy for HIGH HAND.
- delphi里怎样像office里那样可以设置一个图片为最下层,其他的控件都在它的上面?
- 多媒体调用问题
这个网卡的物理地址(Mac地址)还不能得到~~~~
因为要用到远程启动电脑,所以得先知道局域网内所有计算机网卡的Mac地址。还有大虾来吗?谢谢~~~~~~~~~~
uses
....
winsock;
type
TForm1=Class(TForm)
Button1:TButton;
Edit1:TEdit;
Edit2:TEdit;
.......
.......
procedure TForm1.Button1Click(Sender:TOBject);
var
WSAData:TWSAData;
HostEnt:PHostEnt;
sComputerName:String;
begin
sComputerName:=Edit1.text;
WSAStartup(2,WSAData);
HostEnt:=GetHostByName(PChar(sComputerName));
if HostEnt<>nil then
begin
with HostEnt^ do
sIP:=Format('%d.%d.%d.%d',[Byte(h_addr^[0]),
Byte(h_addr^[i]),Byte(h_addr^[2]),Byte(h_addr^[3])]);
end;
WSACleanup;
Edit2.text:=sIP;
end;
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Memo1: TMemo;
Label3: TLabel;
Button1: TButton;
RadioGroup1: TRadioGroup;
RadioButton1: TRadioButton;
RadioButton2: TRadioButton;
RadioButton3: TRadioButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
temp:string;
implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
begin
Memo1.Lines.Clear;
Temp:='c:\Nbtstat.txt';
end;procedure TForm1.Button1Click(Sender: TObject);
var
Command:String;
begin
Memo1.Lines.Clear;
if FileExists(Temp) then
DeleteFile(Temp);
case RadioGroup1.itemindex of
0: Command:='Command.com /c nbtstat '+ '-a' +Edit1.Text +' > '+ Temp;
1: Command:='Command.com /c nbtstat '+ '-A' +Edit2.Text +'> '+Temp;
2: Command:='Command.com /c nbtstat ' + ' -n > '+Temp;
end;
WinExec(Pchar(Command),SW_HIDE);
while not FileExists(Temp) do
Sleep(3000);//此处是避免输入的IP地址不合法或者相印的计算机没有上 //网。
try
Memo1.Lines.LoadFromFile(Temp);
except end;end;procedure TForm1.FormDestroy(Sender: TObject);
begin
if FileExists(Temp) then
DeleteFile(Temp);
end;end.
响应~~~再说,你那取得的是一大段文本呀~~如果我单取其中的网卡地址,不是还
要费事地对文本进行操作了??顺便问一句呀~~这两天怎么连不上大富翁了哦~~~再这里可真人气不旺了哦:((还有大虾来吗??继续在线等候中……嫌分少的话我再加呀~~~~~
在网上找了很多资料,都是对本机网卡的求法,及求得局域网内其他电脑的计算机名和IP地址,现在我是要求得其他电脑的网卡MAc地址。或者,高手指教一下,怎样读出下面字段中“MAC Address = ”后的字串呢?谢谢
NetBIOS Remote Machine Name Table Name Type Status
-------------------------------------------
ZXD <00> UNIQUE Registered
SZBONKA <00> GROUP Registered
ZXD <03> UNIQUE Registered
ZXD <20> UNIQUE Registered
SZBONKA <1E> GROUP Registered
HML <03> UNIQUE RegisteredMAC Address = 00-50-BA-64-8B-1B