Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.01.13;
Скачать: CL | DM;

Вниз

Не могу получить список всех компьютеров сети!   Найти похожие ветки 

 
Борис ©   (2002-11-13 12:48) [0]

Уважаемые господа! Взял из FAQ такой код. Вроде разобрался.
Но выскакивает ошибка

[Error] Unit1.pas(198): Types of actual and formal var parameters must be identical

Код

procedure TForm1.FindAllComputers(Workgroup: String);
Var EnumHandle : THandle;
WorkgroupRS : TNetResource;
Buf : Array[1..500] of TNetResource;
BufSize : Integer;
Entries : Integer;
Result : Integer;
begin
ComputerCount := 0;
Workgroup := Workgroup + #0;
FillChar(WorkgroupRS, SizeOf(WorkgroupRS) , 0);
With WorkgroupRS do
begin
dwScope := 2;
dwType := 3;
dwDisplayType := 1;
dwUsage := 2;
lpRemoteName := @Workgroup[1];
end;
WNetOpenEnum( RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, @WorkgroupRS, EnumHandle );

Repeat
Entries := 1;
BufSize := SizeOf(Buf);
Result := WNetEnumResource(EnumHandle,Entries,@Buf,BufSize);

If (Result = NO_ERROR) and (Entries = 1) then
begin
Inc( ComputerCount );
Computer[ ComputerCount ] := StrPas(Buf[1].lpRemoteName);
end;
Until (Entries <> 1) or (Result <> NO_ERROR);

WNetCloseEnum( EnumHandle );
end;
{ Find All Computers }

end.


 
savva ©   (2002-11-13 15:37) [1]

ну ты бы хоть строку выделил, а то цфра 198 мне ни о чем не говорит.. максимум что могу посоветовать - проверь типы параметров для функций:))


 
Lord Warlock ©   (2002-11-13 15:40) [2]

Я содрал из того же источника :)))

BufSize : Cardinal;
Entries : Cardinal;

и все заработает. Внимательнее смотри при отладке.


 
Борис ©   (2002-11-13 16:06) [3]

Большое спасибо, сейчас буду пробывать!


 
Mirag   (2002-11-14 11:28) [4]

Лови исходник - рабочий, я его компилил на D6-D7:
*************************************************
unit Net;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ComCtrls, StdCtrls, Buttons, ImgList, ExtCtrls;

type
TNetForm = class(TForm)
ListView1: TListView;
ImageList1: TImageList;
Button1: TButton;
Edit1: TEdit;
Timer: TTimer;
Label1: TLabel;
Button2: TButton;
{ procedure FormShow(Sender: TObject);}
procedure BitBtn2Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure TimerTimer(Sender: TObject);
procedure FormCreate(Sender: TObject);

private
{ Private declarations }
public
{ Public declarations }
Function FillNetLevel(xxx: PNetResource; list: TListItems) : Word;
function GetComputer:String;
end;

var
NetForm: TNetForm;
name_server:integer;
implementation
uses main,Info,Network_connect;
{$R *.DFM}

function TNetForm.FillNetLevel(xxx: PNetResource; List:TListItems): Word;
Type
PNRArr = ^TNRArr;
TNRArr = array[0..59] of TNetResource;
Var
x: PNRArr;
tnr: TNetResource;
I : integer;
EntrReq,
SizeReq,
twx: THandle;
WSName: string;
LI:TListItem;
begin

Result :=WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY,RESOURCEUSAGE_CONTAINER, xxx, twx);
If Result = ERROR_NO_NETWORK Then Exit;
if Result = NO_ERROR then
begin
New(x);
EntrReq := 1;
SizeReq := SizeOf(TNetResource)*59;
while (twx <> 0) and
(WNetEnumResource(twx, EntrReq, x, SizeReq) <> ERROR_NO_MORE_ITEMS) do
begin
For i := 0 To EntrReq - 1 do
begin
Move(x^[i], tnr, SizeOf(tnr));
case tnr.dwDisplayType of
RESOURCEDISPLAYTYPE_SERVER:
begin
if tnr.lpRemoteName <> "" then
WSName:= tnr.lpRemoteName
else WSName:= tnr.lpComment;
LI:=list.Add;
LI.Caption:=copy(WSName,3,length(WSName)-2);
//list.Add(WSName);


end;
else FillNetLevel(@tnr, list);
end;
end;
end;
//Dispose(x);
WNetCloseEnum(twx);
end;
end;


{procedure TNetForm.FormShow(Sender: TObject);
begin
ListView1.Items.Clear;
FillNetLevel(nil,ListView1.Items);
end;}

function TNetForm.GetComputer: String;
begin
result:="";
if (ShowModal=mrok)and(ListView1.Selected<>nil) then result:=ListView1.Selected.Caption;
end;

procedure TNetForm.BitBtn2Click(Sender: TObject);
begin
ModalResult:=mrcancel;
end;

procedure TNetForm.BitBtn1Click(Sender: TObject);
begin
modalresult:=mrok;
end;



procedure TNetForm.Button1Click(Sender: TObject);
var i:integer;
j:integer;
name,k:string;
begin
try
ListView1.Items.Clear;
FillNetLevel(nil,ListView1.Items);
i:=ListView1.Items.Count;
edit1.Text:=IntToStr(i);
i:=ListView1.Items.Count;
edit1.Text:=IntToStr(i);



//i:=0;
if i=0 then begin
Messagebox(0,"Не найден ни один сетевой ресурс!"+#13#10+"Вероятно ваша сеть неисправна!"+#13#10+"Попробуйте перезагрузить компьютер.","Внимание!",MB_OK);
Main_form.Edit1.Text:="FALSE";
end;

if i>0 then begin
Messagebox(0,"Найдены сетевые ресурсы!"+#13#10+"Ваша сеть исправна!","Внимание!",MB_OK);
Main_form.Edit1.Text:="TRUE";
end;
button1.Enabled:=false;
except
messagebox(0,"Невозможно выполнить задачу","Внимание",MB_OK);
end;

end;



procedure TNetForm.Button2Click(Sender: TObject);
begin
close;
end;

procedure TNetForm.TimerTimer(Sender: TObject);
begin
if ListView1.Items.Count=0 then close;
end;

procedure TNetForm.FormCreate(Sender: TObject);
begin
button1.Enabled:=true;
end;

end.
*************************************************************



 
kalishenko stas   (2002-11-14 19:24) [5]

>>Mirag

А что за формы main,Info,Network_connect и что они делают?



Страницы: 1 вся ветка

Текущий архив: 2003.01.13;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.018 c
1-37100
race1
2002-12-28 15:47
2003.01.13
mouse


14-37333
Хмырь
2002-12-22 17:29
2003.01.13
Где скачать Дельфи? :-)))


7-37421
Xia
2002-10-29 16:39
2003.01.13
mov eax,


1-37083
alvin
2003-01-03 10:24
2003.01.13
TreeView


1-37105
Алексей П
2003-01-03 08:05
2003.01.13
TQuickRep вызвать