Форум: "Сети";
Текущий архив: 2003.01.20;
Скачать: [xml.tar.bz2];
Вниз
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;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.01 c