[ Поиск ] - [ Пользователи ] - [ Календарь ]

Привет Дельфистам! в Рязани и Рязанской области :

Перейти на полную версию
Привет Дельфистам! - в Рязани
Кактус
Вот есть у меня такой вопросик: как бы мне от Windows получить список компьютеров, подключенных к сети. Желательно на Паскале, но тексты Си, Basica, Java и т.д. тоже принимаются.

Уже спасибо. smile.gif
bukan
Вот, порылся у себя на компе в доках, может тебе поможет:

Код


>> Выводит Список компьютеров в локальной сети

Зависимости: Смотрите uses
Автор:       Mirag, wwwMirage@yandex.ru, Mirag
Copyright:   Mirag
Дата:        14 ноября 2002 г.
***************************************************** }

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.

DjPUH-RYAZAN
Можа поможет...
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.



Вот ещё....

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;
Пример вызова:

FillNetLevel(nil, ListView1.Items);



Ну и ещё вот...

function EnumerateFunc(hwnd: HWND; hdc: HDC; lpnr: PNetResource): Boolean;
const
cbBuffer: DWORD = 16384; // 16K is a good size
var
hEnum, dwResult, dwResultEnum: DWORD;
lpnrLocal: array
[0..16384 div SizeOf(TNetResource)] of TNetResource;
// pointer to enumerated structures
i: integer;
cEntries: Longint;
begin
centries := -1; // enumerate all possible entries

// Call the WNetOpenEnum function to begin the enumeration.
dwResult := WNetOpenEnum(
RESOURCE_CONTEXT, // Enumerate currently connected resources.
RESOURCETYPE_DISK, // all resources
0, // enumerate all resources
lpnr, // NULL first time the function is called
hEnum // handle to the resource
);

if (dwResult <> NO_ERROR) then
begin
// Process errors with an application-defined error handler
Result := False;
Exit;
end;

// Initialize the buffer.
FillChar(lpnrLocal, cbBuffer, 0);

// Call the WNetEnumResource function to continue
// the enumeration.
dwResultEnum := WNetEnumResource(hEnum, // resource handle
DWORD(cEntries), // defined locally as -1
@lpnrLocal, // LPNETRESOURCE
cbBuffer); // buffer size

// This is just printing
for i := 0 to cEntries - 1 do
begin
// loop through each structure and
// get remote name of resource... lpnrLocal[i].lpRemoteName)
end;

// Call WNetCloseEnum to end the enumeration.
dwResult := WNetCloseEnum(hEnum);

if (dwResult <> NO_ERROR) then
begin
// Process errors... some user defined function here
Result := False;
end
else
Result := True;
end;



Может это подойти...

var
Computer: array[1..500] of string[25];
ComputerCount: Integer;

procedure 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 }



Если чё, пиши...
Infest
Народ, вот я намыл Делфу седьмую, кой какие навыки програмирования у меня есть (в Паскале чуток, да ХТМЛ), с чего мне начать Делфу? А то я чего-то немного не воткнул сразу... =)
Grey
купи книгу Бобровского. Для начала самое то
Infest
Чё за Бобровскго? Скажи плиз полное название.
Grey
C. Бобровский "Учебный курс" я за 140 руб. покупал в Барсе
Night_storm
Я рекомендую "Билию Делфи" М. Фленова, а потом его же "Делфи глазами хакера", а так же "Делфи:народные советы" А.Шкрыля. Все продается в Барсе.
GrayDoberman
Ну про книги можно вечно говорить, вот тебе сайтик с корторого можно слить клансную прогу с интереснейшими примерами: http://delphiworld.narod.ru/
Zemond
А еще лучше начать с чужих программ и манов с инета + книжек издательства "ПИТЕР" очень кстати не плохие книжечки(их стоимость кстати очень и очень не большая, в чем их большой плюс), конечно совсем начальный уровень, но в начале очень не плохо понять что к чему на нормальном русском языке а не на техническом в котором понимаешь только предлоги и не которые слова..=( ну а потом уже можно взять что-то посерьезней. Вот кстати не плохой сайтик электронных книжек по дельфям и не только: http://c-books.info/books/load.php?ty=delphi
А насчет книжек серии "Глазами хакера" если честно то имхо это бред полный..если не много погуглить то можно найти целые конференции по обсуждению этих книг, но вот хороших отзывов по ним мало, да и будучи сам в барсе просмотрел парочку, материал мне не очень понравился, половина статей содрана с инета, что-то разбиралось в журнале "Хакер" есть лишь крупица интересного и то, до этого при желании можно додуматься самому, а не тратить 150р если не больше на эту книгу.
Быстрый ответ:

 Включить смайлы |  Enable Signature
Здесь расположена полная версия этой страницы.

Яндекс цитирования