Форум: "Сети";
Текущий архив: 2003.11.24;
Скачать: [xml.tar.bz2];
ВнизКак просканировать сеть на наличие в ней включенных компов Найти похожие ветки
← →
Pohil (2003-09-24 12:40) [0]Help me!!!
← →
Verg (2003-09-24 12:43) [1]В "кладовку" залезь, поищи!!!
← →
GH@ST (2003-09-24 12:46) [2]Пинг
← →
Verg (2003-09-24 12:51) [3]
> Пинг
Супер!
Все компы просто обязаны иметь установленным протокол TCP/IP, без этого протокола, конечно, сеть MS Windows жить не может...
← →
Hooch (2003-09-24 12:54) [4]в Делфи компонет есть TShellTreeView показывает компы в сети, погляди исходники может поможет
← →
Anatoly Podgoretsky (2003-09-24 13:12) [5]Наличии протокола тоже не является критерием для обнаружения, часто установлено "не обнаруживать компьютер"
← →
Mickey (2003-09-24 17:43) [6]function TForm_PSW.GetContainerList(ListRoot:PNetResource):TList;
Var
TempRec : PNetRes;
Buf : Pointer;
Count,
BufSize,
Res : DWORD;
lphEnum : THandle;
p : PNetResourceArr;
i : SmallInt;
NetworkList : TList;
Begin
NetworkList := TList.Create;
Result:=nil;
BufSize := 8192;
GetMem(Buf, BufSize);
Try
Res := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_DISK,
RESOURCEUSAGE_CONTAINER{0}, ListRoot,lphEnum);
If Res <> 0 Then
Raise Exception(Res);
Count := $FFFFFFFF;
Res := WNetEnumResource(lphEnum, Count, Buf, BufSize);
If Res = ERROR_NO_MORE_ITEMS
Then Exit;
If (Res <> 0) Then
Raise Exception(Res);
P := PNetResourceArr(Buf);
For I := 0 To Count - 1 Do
Begin
New(TempRec);
TempRec^.dwScope := P^.dwScope;
TempRec^.dwType := P^.dwType ;
TempRec^.dwDisplayType := P^.dwDisplayType ;
TempRec^.dwUsage := P^.dwUsage ;
TempRec^.LocalName := StrPas(P^.lpLocalName);
TempRec^.RemoteName := StrPas(P^.lpRemoteName);
TempRec^.Comment := StrPas(P^.lpComment);
TempRec^.Provider := StrPas(P^.lpProvider);
NetworkList.Add(TempRec);
Inc(P);
End;
Res := WNetCloseEnum(lphEnum);
If Res <> 0 Then
Raise Exception(Res);
Result:=NetWorkList;
Finally
FreeMem(Buf);
End;
End;
procedure TForm_PSW.Button1Click(Sender: TObject);
var
List:TList;
i:integer;
begin
List:=TList.Create;
List:=GetContainerList(nil);
List:=GetContainerList(List[0]);
for i:=0 to List.Count-1 do
if PNetRes(List[i])^.RemoteName="Твой домен" then
begin
List:=GetContainerList(List[i]);
Break;
end;
for i := 0 to List.Count-1 do
ListBox1.Items.Add(PNetRes(List[i])^.RemoteName);
end;
Проверено, работает.
← →
Е-Моё имя (2003-09-24 17:46) [7]
> Проверено, работает.
всегда?
← →
Snap (2003-09-24 20:43) [8]очевидно работало когда проверялось. А вешей которые рабоитают всегда нету.
← →
Anatoly Podgoretsky (2003-09-25 09:26) [9]Он тебя спрашивает, покажет ли твой код ВСЕ ВКЛЮЧЕНЫЕ МАШИНЫ (как в вопросе), а не зарегистрированые ресурсы.
← →
Толик (2003-09-25 14:31) [10]данный код покажет все зарегистрированные ресурсы, а вот для определение ВКЛЮЧЕННОЙ машины можно воспользоваться, например, ф-ей WinSock.GetHostByName и после каждого её вызова проверять WinSock.WSAGetLastError, если вернулся NULL.
← →
Толик (2003-09-25 14:34) [11]прошу прощения, поторопился. GetHostByName не даёт нужного рез-та. :-((
← →
GH@ST (2003-09-26 13:40) [12]>Verg ©
Умничаем...
Вообще автор не сказал для чего ищем какие компы..куда они включенные..а главное для чего он это делает...если это твоя сеть то лучше установить протокол и всетаки пинг..точнее будет...
← →
icebeerg (2003-09-27 10:31) [13]А если вот это попробовать?
----------------------------
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
ListBox1: TListBox;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
Computer: Array [1..500] of String;
ComputerCount:Integer;
implementation
{$R *.DFM}
procedure FindAllComputers(Workgroup: String);
Var
EnumHandle : THandle;
WorkgroupRS : TNetResource;
Buf : Array[1..500] of TNetResource;
BufSize : Cardinal;
Entries : Cardinal;
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 ] := Buf[1].lpRemoteName;
end;
Until (Entries <> 1) or (Result <> NO_ERROR);
WNetCloseEnum( EnumHandle );
end;
{ Find All Computers }
procedure TForm1.Button1Click(Sender: TObject);
var
i,i2:integer;
Str1,Str2:String;
begin
FindAllComputers("Firma");
For i:=1 to ComputerCount do
Begin
Str1:=Computer[i];
Str2:="";
For i2:=1 to Length(Str1) do
If Str1[i2]<>"\" Then Str2:=Str2+Str1[i2];
Computer[i]:=Str2;
End;
For i:=1 to ComputerCount do
Begin
Str1:=Computer[i];
LIstBox1.Items.Add(Computer[i]);
End;
end;
end.
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2003.11.24;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.01 c