Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 2 901

/ вопрос открыт /

Здравствуйте!
вот функция получения сетевого имени компьютера, а как получить список всех компов в локальной сети, и вывести в ListBox1 ?

Приложение:
  1.  
  2. var
  3. buffer: array[0..255] of char;
  4. size: dword;
  5. begin
  6. size := 256;
  7. if GetComputerName(buffer, size) then
  8. Result := buffer
  9. else
  10. Result := ''
  11. end;


Примечание #1 (12 июня 2009, 12:17):
возможно я не понимаю как эта функция работает.

slava863 Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: slava863 (статус: Посетитель)
Вопрос отправлен: 12 июня 2009, 11:51
Состояние вопроса: открыт, ответов: 2.

Ответ #1. Отвечает эксперт: Пупкин В В

Здравствуйте, slava863!
вот так (см. приложение)

Приложение:
  1. unit Unit1;
  2.  
  3. interface
  4.  
  5. uses
  6. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7. Dialogs, StdCtrls;
  8.  
  9. type
  10. TForm1 = class(TForm)
  11. ListBox1: TListBox;
  12. Button1: TButton;
  13. procedure Button1Click(Sender: TObject);
  14. Procedure EnumResources(LpNR:PNetResource);
  15.  
  16. private
  17. { Private declarations }
  18. public
  19. { Public declarations }
  20. end;
  21.  
  22. type
  23. ///////////////
  24. PNetResourceArray = ^TNetResourceArray;
  25. TNetResourceArray = array[0..MaxInt div SizeOf(TNetResource) - 1] of TNetResource;
  26. ///////////////
  27.  
  28.  
  29. var
  30. Form1: TForm1;
  31.  
  32. implementation
  33.  
  34. {$R *.dfm}
  35.  
  36. procedure TForm1.EnumResources(LpNR:PNetResource);
  37. Var
  38. NetHandle: DWORD;
  39. BufSize: DWORD;
  40. Size:DWORD;
  41. NetResources: PNetResourceArray;
  42. Count: DWORD;
  43. NetResult:Integer;
  44. I: Integer;
  45.  
  46.  
  47. Begin
  48.  
  49. If WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY,0,LpNR,NetHandle) <> NO_ERROR
  50. then Exit;
  51. Try
  52. BufSize := 50 * SizeOf(TNetResource);
  53. GetMem(NetResources, BufSize);
  54. Try
  55. while True do
  56. begin
  57. Count := 1;
  58. Size := BufSize;
  59. NetResult := WNetEnumResource(NetHandle, Count, NetResources, Size);
  60. If NetResult = ERROR_MORE_DATA then
  61. begin
  62. BufSize := Size;
  63. ReallocMem(NetResources, BufSize);
  64. Continue;
  65. end;
  66. if NetResult <> NO_ERROR then Exit;
  67. For I := 0 to Count-1 do
  68. Begin
  69. With NetResources^[I] do
  70. Begin
  71. If RESOURCEUSAGE_CONTAINER =(DwUsage and RESOURCEUSAGE_CONTAINER) then
  72. EnumResources(@NetResources^[I]);
  73. If dwDisplayType = RESOURCEDISPLAYTYPE_SERVER Then
  74.  
  75.  
  76.  
  77.  
  78. Begin
  79. ListBox1.Items.Add(string(LpRemoteName));
  80. End;
  81. End;
  82. End;
  83. End;
  84. finally
  85. FreeMem(NetResources, BufSize);
  86. end;
  87. finally
  88. WNetCloseEnum(NetHandle);
  89. end;
  90. End;
  91. //////////////////////
  92.  
  93.  
  94. procedure TForm1.Button1Click(Sender: TObject);
  95. begin
  96. EnumResources(nil);
  97. end;
  98.  
  99. end.


Ответ отправил: Пупкин В В (статус: 2-ой класс)
Время отправки: 12 июня 2009, 13:01

Ответ #2. Отвечает эксперт: min@y™

Нашёл статью в оффлайн-версии DelphiWorld. К сожалению, не смог найти эту статью на их сайте, поэтому выкладываю в приложение.

Приложение:
  1.  
  2.  
  3.  
  4. { **** UBPFD *********** by delphibase.endimus.com ****
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
  12.  
  13. Copyright: Mirag
  14.  
  15. ***************************************************** }
  16.  
  17. unit Net;
  18.  
  19. interface
  20.  
  21. uses
  22. Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  23. ComCtrls, StdCtrls, Buttons, ImgList, ExtCtrls;
  24.  
  25. type
  26. TNetForm = class(TForm)
  27. ListView1: TListView;
  28. ImageList1: TImageList;
  29. Button1: TButton;
  30. Edit1: TEdit;
  31. Timer: TTimer;
  32. Label1: TLabel;
  33. Button2: TButton;
  34. { procedure FormShow(Sender: TObject);}
  35. procedure BitBtn2Click(Sender: TObject);
  36. procedure BitBtn1Click(Sender: TObject);
  37. procedure Button1Click(Sender: TObject);
  38. procedure Button2Click(Sender: TObject);
  39. procedure TimerTimer(Sender: TObject);
  40. procedure FormCreate(Sender: TObject);
  41.  
  42. private
  43. { Private declarations }
  44. public
  45. { Public declarations }
  46. function FillNetLevel(xxx: PNetResource; list: TListItems): Word;
  47. function GetComputer: string;
  48. end;
  49.  
  50. var
  51. NetForm: TNetForm;
  52. name_server: integer;
  53. implementation
  54. uses main, Info, Network_connect;
  55. {$R *.DFM}
  56.  
  57. function TNetForm.FillNetLevel(xxx: PNetResource; List: TListItems): Word;
  58. type
  59. PNRArr = ^TNRArr;
  60. TNRArr = array[0..59] of TNetResource;
  61. var
  62. x: PNRArr;
  63. tnr: TNetResource;
  64. I: integer;
  65. EntrReq,
  66. SizeReq,
  67. twx: THandle;
  68. WSName: string;
  69. LI: TListItem;
  70. begin
  71.  
  72. Result := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY,
  73. RESOURCEUSAGE_CONTAINER, xxx, twx);
  74. if Result = ERROR_NO_NETWORK then
  75. Exit;
  76. if Result = NO_ERROR then
  77. begin
  78. New(x);
  79. EntrReq := 1;
  80. SizeReq := SizeOf(TNetResource) * 59;
  81. while (twx <> 0) and
  82. (WNetEnumResource(twx, EntrReq, x, SizeReq) <> ERROR_NO_MORE_ITEMS) do
  83. begin
  84. for i := 0 to EntrReq - 1 do
  85. begin
  86. Move(x^[i], tnr, SizeOf(tnr));
  87. case tnr.dwDisplayType of
  88. RESOURCEDISPLAYTYPE_SERVER:
  89. begin
  90. if tnr.lpRemoteName <> '' then
  91. WSName := tnr.lpRemoteName
  92. else
  93. WSName := tnr.lpComment;
  94. LI := list.Add;
  95. LI.Caption := copy(WSName, 3, length(WSName) - 2);
  96. //list.Add(WSName);
  97.  
  98. end;
  99. else
  100. FillNetLevel(@tnr, list);
  101. end;
  102. end;
  103. end;
  104. //Dispose(x);
  105. WNetCloseEnum(twx);
  106. end;
  107. end;
  108.  
  109. {procedure TNetForm.FormShow(Sender: TObject);
  110. begin
  111. ListView1.Items.Clear;
  112. FillNetLevel(nil,ListView1.Items);
  113. end;}
  114.  
  115. function TNetForm.GetComputer: string;
  116. begin
  117. result := '';
  118. if (ShowModal = mrok) and (ListView1.Selected <> nil) then
  119. result := ListView1.Selected.Caption;
  120. end;
  121.  
  122. procedure TNetForm.BitBtn2Click(Sender: TObject);
  123. begin
  124. ModalResult := mrcancel;
  125. end;
  126.  
  127. procedure TNetForm.BitBtn1Click(Sender: TObject);
  128. begin
  129. modalresult := mrok;
  130. end;
  131.  
  132. procedure TNetForm.Button1Click(Sender: TObject);
  133. var
  134. i: integer;
  135. j: integer;
  136. name, k: string;
  137. begin
  138. try
  139. ListView1.Items.Clear;
  140. FillNetLevel(nil, ListView1.Items);
  141. i := ListView1.Items.Count;
  142. edit1.Text := IntToStr(i);
  143. i := ListView1.Items.Count;
  144. edit1.Text := IntToStr(i);
  145.  
  146. //i:=0;
  147. if i = 0 then
  148. begin
  149.  
  150.  
  151.  
  152. Main_form.Edit1.Text := 'FALSE';
  153. end;
  154.  
  155. if i > 0 then
  156. begin
  157.  
  158.  
  159. Main_form.Edit1.Text := 'TRUE';
  160. end;
  161. button1.Enabled := false;
  162. except
  163.  
  164. end;
  165.  
  166. end;
  167.  
  168. procedure TNetForm.Button2Click(Sender: TObject);
  169. begin
  170. close;
  171. end;
  172.  
  173. procedure TNetForm.TimerTimer(Sender: TObject);
  174. begin
  175. if ListView1.Items.Count = 0 then
  176. close;
  177. end;
  178.  
  179. procedure TNetForm.FormCreate(Sender: TObject);
  180. begin
  181. button1.Enabled := true;
  182. end;
  183.  
  184. end.
  185.  


Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 12 июня 2009, 13:25


Мини-форум вопроса

Всего сообщений: 4; последнее сообщение — 12 июня 2009, 16:40; участников в обсуждении: 3.
Пупкин В В

Пупкин В В (статус: 2-ой класс), 12 июня 2009, 13:30 [#1]:

и где делся мой код? =) да уж
Ерёмин А.А.

Ерёмин А.А. (статус: *Администратор), 12 июня 2009, 13:33 [#2]:

Цитата (Пупкин В В):

и где делся мой код? =) да уж

Уже на месте, не нужно волноваться :-)
slava863

slava863 (статус: Посетитель), 12 июня 2009, 16:34 [#3]:

Спасибо конечно всем, можно, что нибудь попросче мне нужно просто список имён компов в сети в listbox, мне начинающему разобраться в этих программах что-то сложновато пока.
Пупкин В В

Пупкин В В (статус: 2-ой класс), 12 июня 2009, 16:40 [#4]:

что там разбиратся кидай на форму listbox и кнопку, код я отправил.
а проще никак, по крайней не встречал.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:46
Выполнено за 0.03 сек.