| 
| 
 | Вопрос # 2 901/ вопрос открыт / | 
 |  Здравствуйте!вот функция получения сетевого имени компьютера, а как получить список всех компов в локальной сети, и вывести в ListBox1 ?
 Приложение:Переключить в обычный режим  varbuffer: array[0..255] of char;size: dword;beginsize := 256;if GetComputerName(buffer, size) thenResult := bufferelseResult := ''end;
Примечание #1 (12 июня 2009, 12:17): возможно я не понимаю как эта функция работает. 
 
|  |   Вопрос задал: slava863 (статус: Посетитель)Вопрос отправлен: 12 июня 2009, 11:51
 Состояние вопроса: открыт, ответов: 2.
 |  Ответ #1. Отвечает эксперт: Пупкин В В Здравствуйте, slava863!вот так (см. приложение)
 Приложение:Переключить в обычный режим unit Unit1; interface uses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, StdCtrls; type  TForm1 = class(TForm)    ListBox1: TListBox;    Button1: TButton;    procedure Button1Click(Sender: TObject);    Procedure EnumResources(LpNR:PNetResource);   private    { Private declarations }  public    { Public declarations }  end; type///////////////PNetResourceArray = ^TNetResourceArray;TNetResourceArray = array[0..MaxInt div SizeOf(TNetResource) - 1] of TNetResource;///////////////  var  Form1: TForm1; implementation {$R *.dfm} procedure TForm1.EnumResources(LpNR:PNetResource);VarNetHandle: DWORD;BufSize: DWORD;Size:DWORD;NetResources: PNetResourceArray;Count: DWORD;NetResult:Integer;I: Integer;  Begin If WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY,0,LpNR,NetHandle) <> NO_ERRORthen Exit;TryBufSize := 50 * SizeOf(TNetResource);GetMem(NetResources, BufSize);Trywhile True dobeginCount := 1;Size := BufSize;NetResult := WNetEnumResource(NetHandle, Count, NetResources, Size);If NetResult = ERROR_MORE_DATA thenbeginBufSize := Size;ReallocMem(NetResources, BufSize);Continue;end;if NetResult <> NO_ERROR then Exit;For I := 0 to Count-1 doBeginWith NetResources^[I] doBeginIf RESOURCEUSAGE_CONTAINER =(DwUsage and RESOURCEUSAGE_CONTAINER) thenEnumResources(@NetResources^[I]);If dwDisplayType = RESOURCEDISPLAYTYPE_SERVER Then    BeginListBox1.Items.Add(string(LpRemoteName));End;End;End;End;finallyFreeMem(NetResources, BufSize);end;finallyWNetCloseEnum(NetHandle);end;End;//////////////////////  procedure TForm1.Button1Click(Sender: TObject);beginEnumResources(nil);end; end.
|  | Ответ отправил: Пупкин В В (статус: 2-ой класс)Время отправки: 12 июня 2009, 13:01
 
 |  Ответ #2. Отвечает эксперт: min@y™ Нашёл статью в оффлайн-версии DelphiWorld. К сожалению, не смог найти эту статью на их сайте, поэтому выкладываю в приложение. Приложение:Переключить в обычный режим    { **** UBPFD *********** by delphibase.endimus.com ****        Copyright:   Mirag ***************************************************** } 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;implementationuses 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         Main_form.Edit1.Text := 'FALSE';    end;     if i > 0 then    begin        Main_form.Edit1.Text := 'TRUE';    end;    button1.Enabled := false;  except   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. 
|  | Ответ отправил: min@y™ (статус: Доктор наук)Время отправки: 12 июня 2009, 13:25
 
 |  
 Мини-форум вопросаВсего сообщений: 4; последнее сообщение — 12 июня 2009, 16:40; участников в обсуждении: 3. 
|   | Пупкин В В (статус: 2-ой класс), 12 июня 2009, 13:30 [#1]:и где делся мой код? =) да уж |  
|   | Ерёмин А.А. (статус: *Администратор), 12 июня 2009, 13:33 [#2]: Цитата (Пупкин В В): и где делся мой код? =) да уж Уже на месте, не нужно волноваться
   |  
|   | slava863 (статус: Посетитель), 12 июня 2009, 16:34 [#3]:Спасибо конечно всем, можно, что нибудь попросче мне нужно просто список имён компов в сети в listbox, мне начинающему  разобраться в этих программах что-то сложновато пока. |  
|   | Пупкин В В (статус: 2-ой класс), 12 июня 2009, 16:40 [#4]:что там разбиратся кидай на форму listbox и кнопку, код я отправил. а проще никак, по крайней не встречал.
 |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |