|
Вопрос # 2 901/ вопрос открыт / |
|
Здравствуйте!
вот функция получения сетевого имени компьютера, а как получить список всех компов в локальной сети, и вывести в ListBox1 ?
Приложение: Переключить в обычный режим-
- var
- buffer: array[0..255] of char;
- size: dword;
- begin
- size := 256;
- if GetComputerName(buffer, size) then
- Result := buffer
- else
- Result := ''
- 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);
- Var
- NetHandle: DWORD;
- BufSize: DWORD;
- Size:DWORD;
- NetResources: PNetResourceArray;
- Count: DWORD;
- NetResult:Integer;
- I: Integer;
-
-
- Begin
-
- If WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY,0,LpNR,NetHandle) <> NO_ERROR
- then Exit;
- Try
- BufSize := 50 * SizeOf(TNetResource);
- GetMem(NetResources, BufSize);
- Try
- while True do
- begin
- Count := 1;
- Size := BufSize;
- NetResult := WNetEnumResource(NetHandle, Count, NetResources, Size);
- If NetResult = ERROR_MORE_DATA then
- begin
- BufSize := Size;
- ReallocMem(NetResources, BufSize);
- Continue;
- end;
- if NetResult <> NO_ERROR then Exit;
- For I := 0 to Count-1 do
- Begin
- With NetResources^[I] do
- Begin
- If RESOURCEUSAGE_CONTAINER =(DwUsage and RESOURCEUSAGE_CONTAINER) then
- EnumResources(@NetResources^[I]);
- If dwDisplayType = RESOURCEDISPLAYTYPE_SERVER Then
-
-
-
-
- Begin
- ListBox1.Items.Add(string(LpRemoteName));
- End;
- End;
- End;
- End;
- finally
- FreeMem(NetResources, BufSize);
- end;
- finally
- WNetCloseEnum(NetHandle);
- end;
- End;
- //////////////////////
-
-
- procedure TForm1.Button1Click(Sender: TObject);
- begin
- EnumResources(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;
- 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
-
-
-
- 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 и кнопку, код я отправил.
а проще никак, по крайней не встречал.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|