Создание, раскрутка, оптимизация сайтов.
Купи, продай свое железо!


Здравствуйте Гость ( Вход | Регистрация )

  Ответить · Новая Тема ·Создать опрос

> Привет Дельфистам!, Обмен опытом в програмировании...
Кактус
Дата: 21.01.2006 - 12:57




Unregistered










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

Уже спасибо. smile.gif
· · · ·
^
bukan
Дата: 22.01.2006 - 18:51
Offline



Administrator
******

Профиль
Группа: Администраторы
Сообщений: 1991
Пользователь №: 1
Регистрация: 17.09.2004



Вот, порылся у себя на компе в доках, может тебе поможет:

Код


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

Зависимости: Смотрите 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.



--------------------
· PM · E-Mail · WWW · ICQ ·
^
DjPUH-RYAZAN
Дата: 10.09.2006 - 05:16
Offline



Новичок
*

Профиль
Группа: Пользователи
Сообщений: 29
Пользователь №: 762
Регистрация: 15.01.2006



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



Если чё, пиши...
Рейтинг:
(0%) -----
· PM · E-Mail · ·
^
Infest
Дата: 24.11.2006 - 00:38
Offline



Новичок
*

Профиль
Группа: Пользователи
Сообщений: 24
Пользователь №: 2552
Регистрация: 1.10.2006



Народ, вот я намыл Делфу седьмую, кой какие навыки програмирования у меня есть (в Паскале чуток, да ХТМЛ), с чего мне начать Делфу? А то я чего-то немного не воткнул сразу... =)


--------------------
I'm blind? But not dead...
Рейтинг:
(0%) -----
· PM · E-Mail · ICQ ·
^
Grey
Дата: 25.11.2006 - 00:13
Offline



Новичок
*

Профиль
Группа: Пользователи
Сообщений: 6
Пользователь №: 3196
Регистрация: 19.11.2006



купи книгу Бобровского. Для начала самое то


--------------------
Рекурсия-удел богов, смертным доступна лишь итерация.
Рейтинг:
(0%) -----
· PM · E-Mail · ·
^
Infest
Дата: 25.11.2006 - 01:01
Offline



Новичок
*

Профиль
Группа: Пользователи
Сообщений: 24
Пользователь №: 2552
Регистрация: 1.10.2006



Чё за Бобровскго? Скажи плиз полное название.


--------------------
I'm blind? But not dead...
Рейтинг:
(0%) -----
· PM · E-Mail · ICQ ·
^
Grey
Дата: 27.11.2006 - 22:31
Offline



Новичок
*

Профиль
Группа: Пользователи
Сообщений: 6
Пользователь №: 3196
Регистрация: 19.11.2006



C. Бобровский "Учебный курс" я за 140 руб. покупал в Барсе


--------------------
Рекурсия-удел богов, смертным доступна лишь итерация.
Рейтинг:
(0%) -----
· PM · E-Mail · ·
^
Night_storm
Дата: 2.04.2007 - 23:09
Offline



Новичок
*

Профиль
Группа: Пользователи
Сообщений: 36
Пользователь №: 4673
Регистрация: 21.03.2007



Я рекомендую "Билию Делфи" М. Фленова, а потом его же "Делфи глазами хакера", а так же "Делфи:народные советы" А.Шкрыля. Все продается в Барсе.
Рейтинг:
(0%) -----
· PM · E-Mail · WWW · ICQ ·
^
GrayDoberman
Дата: 4.04.2007 - 11:12
Offline



Старик
***

Профиль
Группа: Пользователи
Сообщений: 178
Пользователь №: 871
Регистрация: 9.02.2006



Ну про книги можно вечно говорить, вот тебе сайтик с корторого можно слить клансную прогу с интереснейшими примерами: http://delphiworld.narod.ru/


--------------------
Мир Lineage2 загадочен и интересен, пробум его познать на сервере www.perious.ru
Destroer - Destroer 62lvl
HaosDegradar - Overlord 72lvl
Рейтинг:
(0%) -----
· PM · E-Mail · ICQ ·
^
Zemond
Дата: 20.05.2008 - 23:16
Offline



Пользователь
**

Профиль
Группа: Пользователи
Сообщений: 52
Пользователь №: 4229
Регистрация: 12.01.2007



А еще лучше начать с чужих программ и манов с инета + книжек издательства "ПИТЕР" очень кстати не плохие книжечки(их стоимость кстати очень и очень не большая, в чем их большой плюс), конечно совсем начальный уровень, но в начале очень не плохо понять что к чему на нормальном русском языке а не на техническом в котором понимаешь только предлоги и не которые слова..=( ну а потом уже можно взять что-то посерьезней. Вот кстати не плохой сайтик электронных книжек по дельфям и не только: http://c-books.info/books/load.php?ty=delphi
А насчет книжек серии "Глазами хакера" если честно то имхо это бред полный..если не много погуглить то можно найти целые конференции по обсуждению этих книг, но вот хороших отзывов по ним мало, да и будучи сам в барсе просмотрел парочку, материал мне не очень понравился, половина статей содрана с инета, что-то разбиралось в журнале "Хакер" есть лишь крупица интересного и то, до этого при желании можно додуматься самому, а не тратить 150р если не больше на эту книгу.


--------------------
интернет как смерть..забирает лучших
Рейтинг:
(0%) -----
· PM · E-Mail · ·
^

Опции темы Ответить · Новая Тема ·Создать опрос

 



[ Время генерации скрипта: 0.0253 ]   [ Использовано запросов: 12 ]   [ GZIP включён ]