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

Вниз

IP всех компов в локальной сети   Найти похожие ветки 

 
kalishenko stas   (2002-11-15 20:59) [0]

У меня есть пример получения всех машин в сети, но он почему-то не работает (не пойму почему). Может, потому что сеть одноранговая, и, кроме того, на всех машинах стоит NovellClient, т.е. сеть новеловская. Если причина в этом, то что тогда делать, кто нибудь скажет?


 
cypher ©   (2002-11-17 01:01) [1]

покажи код
все примеры, которые я видел все для работы с одноранговыми сетями...


 
kalishenko stas   (2002-11-18 09:18) [2]

>>Cypher и другим

Вот исходник:

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;
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;




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;


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.




 
Sergey V. Shadrin   (2002-11-18 09:50) [3]

2 kalishenko stas) а tcp/ip в сети вообще стоит?


 
kalishenko stas   (2002-11-18 11:40) [4]

Стоит и tcp/ip, и ipx/spx (по второму работает NetWare).


 
Wonder ©   (2002-11-18 14:00) [5]

А "Клиент для сетей Microsoft" стоит?


 
nickolayLI   (2002-11-18 14:01) [6]

Писок всех компов
function TTimeCr.FillNetLevel(xxx: PNetResource; list: TStrings) : Word;
Type
PNRArr = ^TNRArr;
TNRArr = array [0..59] of TNetResource;
Var
x: PNRArr;
tnr: TNetResource;
I : integer;
EntrReq,
SizeReq,
twx: Cardinal;
WSName: string;
begin
Result := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, 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;
list.Add(Copy(WSName,3,Length(WSName)));
Application.ProcessMessages;
end; else FillNetLevel(@tnr, list);
end;
end;
end;
Dispose(x);
WNetCloseEnum(twx);
end;
end;

айпи по имени
function HostToIP(Name: string; var Ip: string): Boolean;
var
wsdata : TWSAData;
hostName : array [0..255] of char;
hostEnt : PHostEnt;
addr : PChar;
begin
WSAStartup ($0101, wsdata);
try
gethostname (hostName, sizeof (hostName));
StrPCopy(hostName, Name);
hostEnt := gethostbyname (hostName);
if Assigned (hostEnt) then
if Assigned (hostEnt^.h_addr_list) then begin
addr := hostEnt^.h_addr_list^;
if Assigned (addr) then begin
IP := Format ("%d.%d.%d.%d", [byte (addr [0]),
byte (addr [1]), byte (addr [2]), byte (addr [3])]);
Result := True;
end
else
Result := False;
end
else
Result := False
else begin
Result := False;
end;
finally
WSACleanup;
end
end;


 
kalishenko   (2002-11-18 16:11) [7]

>>Wonder

По умолчанию стоит "Novell NetWare Client". Так что, поэтому ничего и не видно?


 
Wonder ©   (2002-11-18 16:53) [8]

Я не спрашивал, что стоит по умолчанию, я спрашивал, стоит ли "Клиент для сетей Microsoft" вообще...

В "Сетевом окружении" имена компьютеров (окромя серверов Нетвари) видны?


 
kalishenko   (2002-11-18 17:03) [9]

>>Wonder

"Клиент для сетей Microsoft" стоит и компы в сетевом окружении видны.


 
Wonder ©   (2002-11-18 17:33) [10]

http://delphi.mastak.com/cgi-bin/faq.pl?look=1&id=988621104&n=20


 
kalishenko   (2002-11-18 17:48) [11]

Сейчас попробую, хотя не пойму в чем разница. Все эти проги (получения списка машин) используют одни и те же функции.


 
False_Delirium ©   (2002-11-19 03:03) [12]

Служюа доступа к файлам и принтерам ... если не стоит, то нет биос не видит этот комп...


 
kalishenko   (2002-11-19 09:31) [13]

И служба доступа стоит, т.е. все в полном боекомплекте.


 
Wonder ©   (2002-11-19 10:08) [14]

Так у тебя код из FAQ-а заработал или где?


 
kalishenko stas   (2002-11-19 13:39) [15]

>>Wonder

Да нет, как раз наоборот, код из FAQ-а не заработал (как только не кручу). Выдает ошибки типа "[Error] Unit1.pas(60): Types of actual and formal var parameters must be identical". Че с ней делать не знаю.

"И служба доступа стоит, т.е. все в полном боекомплекте." - а это я о том, что все необходимые компоненты сетевого окружения стоят.


 
Wonder ©   (2002-11-19 14:07) [16]

>>Да нет, как раз наоборот, код из FAQ-а не заработал (как только не кручу). Выдает ошибки типа "[Error] Unit1.pas(60): Types of actual and formal var parameters must be identical". Че с ней делать не знаю.

:)))
Ну а в хелп по этой ф-ции глянуть? Да и поглядеть тип параметров?

Замени

var
...
BufSize : Integer;
Entries : Integer;
...

на

var
...
BufSize : Longword;
Entries : Longword;
...

и будет тебе счастье :)))


 
kalishenko stas   (2002-11-19 14:30) [17]

Спасибо огромное, Wonder, все получилось. (Уррррра!)


 
Filat ©   (2002-11-19 21:41) [18]

А для разных сегментов показывает, т.е. типа 10.10.1.35 и 10.10.5.35 покажет?
Я полгода назад что-то похожее делал, так показывал компы только в том сегменте, в котором мой комп, хотя DNS и все остальное настроено, ну шлюзы соответственно тоже....



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

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

Наверх




Память: 0.51 MB
Время: 0.022 c
7-62873
sinner
2002-11-09 04:24
2003.01.20
...нужен нестандартный hard...


1-62518
fifo
2003-01-10 17:31
2003.01.20
список файлов каталога


1-62653
Влад_Ч
2003-01-09 19:06
2003.01.20
Быстрая запись на диск


6-62701
badaxe
2002-11-22 11:39
2003.01.20
Список назначеных ip адресов под WIN2K.


8-62669
Igor__
2002-09-13 22:30
2003.01.20
Помошник-помошник-помошник...