Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2004.08.29;
Скачать: [xml.tar.bz2];

Вниз

локальные сети, IP...   Найти похожие ветки 

 
S-Viper   (2004-06-30 00:22) [0]

Здравствуйте!
Я тут недавно нашел одну статью по поводу вывода списка компьютеров в локальной сети. Все вроде бы хорошо, работает. Но! Не знаю что сделать чтобы он определял не только RESOURCEDISPLAYTYPE_DOMAIN и RESOURCEDISPLAYTYPE_SERVER но и RESOURCEDISPLAYTYPE_SHARE... Почему он даже в ..._SHARE и не пытается заглянуть... И если не сложно, можно было бы сюда добавить код по определению IP-адреса каждого компа?

var Form1: TForm1;
   MyTreeNode: TTreeNode;
   countgroup,a,z: integer;
   Reg: TRegistry;

implementation {$R *.dfm}

Function FillNetLevel(xxx: PNetResource; list: TStrings) : Word;
Type PNRArr = ^TNRArr;
    TNRArr = array[0..255] of TNetResource;
Var x: PNRArr;
   tnr: TNetResource;
   I : integer;
   EntrReq, SizeReq, twx: THANDLE;
   WSName: string;
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)*255;
   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_DOMAIN:
          begin
           if tnr.lpRemoteName <> "" then WSName:= tnr.lpRemoteName else WSName:= tnr.lpComment;
           list.Add(WSName);
           Inc(countgroup);
           MyTreeNode := Form1.TreeView.Items.Add(nil, WSName);
           FillNetLevel(@tnr, list);
          end;
         RESOURCEDISPLAYTYPE_SERVER:
          begin
           if tnr.lpRemoteName <> "" then WSName:= tnr.lpRemoteName else WSName:= tnr.lpComment;
           list.Add(" "+WSName);
           Form1.TreeView.Items.AddChild(MyTreeNode,WSName);
           FillNetLevel(@tnr, list);
          end;
         RESOURCEDISPLAYTYPE_SHARE:
          begin
           if tnr.lpRemoteName <> "" then WSName:= tnr.lpRemoteName else WSName:= tnr.lpComment;
           Form1.TreeView.Items.Add(MyTreeNode, WSName);
           list.Add(" "+WSName);
          end;
        else FillNetLevel(@tnr, list);
      end;
    end;
 end;
Dispose(x);
WNetCloseEnum(twx);
end;
Form1.TreeView.FullExpand;
end;

procedure TForm1.StartClick(Sender: TObject);
var list:TStringList;
   xxx: PNetResource;
begin
a:=z{+1};
TreeView.Items.Clear;
countgroup:=0;
list:= TStringList.Create;
xxx:= nil;
FillNetLevel(xxx, list);
list.Free;
end;


 
Said ©   (2004-06-30 08:33) [1]

Могу дать готовую прогу, с исходниками, с условием:
ответишь, напишешь пожелания и т.п.
Могу выслать на твой ящик, подтверди согласие.


 
cherrex   (2004-06-30 15:40) [2]

Вышли мне cherrex@mail.ru. Буду благодарен! И напишу тебе кучу пожеланий.


 
Said ©   (2004-06-30 16:10) [3]

Забирай


 
cherrex   (2004-06-30 16:14) [4]

Ну спасибо!!! Желаю долнейших успехов в ПРОГРАММИРОВАНИИ. Удачи.


 
Rouse_ ©   (2004-06-30 17:36) [5]

Бог ты мой, к чему такие секреты с исходниками :)

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, ComCtrls, Winsock, ImgList, ShellAPI;

type
 TDemoThread = class(TThread)
 private
   TreeDomain: TTreeNode;
   TreeServer: TTreeNode;
   TreeShares: TTreeNode;
   Param_dwDisplayType: Byte;
   Param_lpRemoteName: String;
 protected
   procedure Execute; override;
   procedure Scan(Res: TNetResource; Root: boolean);
   procedure AddElement;
   procedure Stop;
 end;

 TForm1 = class(TForm)
   Button1: TButton;
   TreeView1: TTreeView;
   StatusBar1: TStatusBar;
   ImageList1: TImageList;
   procedure Button1Click(Sender: TObject);
   procedure TreeView1Click(Sender: TObject);
   procedure FormCreate(Sender: TObject);
   procedure TreeView1DblClick(Sender: TObject);
 private
   Thread: TDemoThread;
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

function GetIPAddress(NetworkName: String): String;
var
Error: DWORD;
HostEntry: PHostEnt;
Data: WSAData;
Address: In_Addr;
begin
 Delete(NetworkName, 1, 2);
 Error:=WSAStartup(MakeWord(1, 1), Data);
 if Error = 0 then
 begin
   HostEntry:=gethostbyname(PChar(NetworkName));
   Error:=GetLastError;
   if Error = 0 then
   begin
     Address:=PInAddr(HostEntry^.h_addr_list^)^;
     Result:=inet_ntoa(Address);
   end
   else
    Result:="Unknown";
 end
 else
   Result:="Error";
 WSACleanup;
end;

{ TDemoThread }

procedure TDemoThread.Execute;
var
 R:TNetResource;
begin
 inherited;
 Priority := tpIdle;
 FreeOnTerminate := True;
 Resume;
 Scan(R, True);
 TreeDomain := nil;
 TreeServer := nil;
 Synchronize(Stop);
end;

procedure TDemoThread.Scan(Res: TNetResource; Root: boolean);
var
hEnum: cardinal;
nrResource: array[0..512] of TNetResource;
dwSize: DWORD;
numEntries: DWORD;
I: DWORD;
dwResult: DWORD;
begin
 if Root then
   dwResult := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_DISK,
     0, nil, hEnum)
 else
   dwResult := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_DISK,
     0, @Res, hEnum);
 if dwResult = NO_ERROR then
 begin
   dwSize := SizeOf(nrResource);
   numEntries := DWORD(-1);
   if WNetEnumResource(hEnum, numEntries, @nrResource, dwSize) = NO_ERROR then
   begin
     for i := 0 to numEntries - 1 do
     begin
       if Terminated then Break;
       with nrResource[i] do
       begin
         Param_dwDisplayType := dwDisplayType;
         Param_lpRemoteName := lpRemoteName;
       end;
       if Assigned(nrResource[i].lpRemoteName) then
         Synchronize(AddElement);
       Scan(nrResource[i], false);
     end;
   WNetCloseEnum(hEnum);
   end;
 end;
end;

procedure TDemoThread.AddElement;
begin
 Application.ProcessMessages;
 if Param_dwDisplayType = RESOURCEDISPLAYTYPE_DOMAIN then
 begin
   TreeDomain := Form1.TreeView1.Items.Add(nil, Param_lpRemoteName);
   TreeDomain.StateIndex := 1;
 end
 else
   if Param_dwDisplayType = RESOURCEDISPLAYTYPE_SERVER then
   begin
     TreeServer := Form1.TreeView1.Items.AddChild(TreeDomain, Param_lpRemoteName + " IP: " + GetIPAddress(Param_lpRemoteName));
     TreeServer.StateIndex := 2;
   end
   else
   begin
     TreeShares := Form1.TreeView1.Items.AddChild(TreeServer, Param_lpRemoteName);
     TreeShares.StateIndex := 3;
   end;
end;

procedure TDemoThread.Stop;
begin
 Form1.StatusBar1.Panels[1].Text := "   Сканирование завершено ...";
 Form1.Button1.Caption := "Начать сканирование";
 Form1.Button1.Enabled := True;
 Form1.Tag := 0;
end;

{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);
begin
 Tag := 0;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 Tag := Tag + 1;
 if (Tag mod 2) = 1 then
 begin
   TreeView1.Items.Clear;
   StatusBar1.Panels[1].Text := "   Идет сканирование ...";
   Button1.Caption := "Остановить сканирование";
   Thread := TDemoThread.Create(False);
 end
 else
 begin
   StatusBar1.Panels[1].Text := "   Завершение потока ...";
   Button1.Enabled := False;
   Thread.Terminate;
 end;
end;

procedure TForm1.TreeView1Click(Sender: TObject);
begin
 if Assigned(TreeView1.Selected) then
   StatusBar1.Panels[0].Text := "   " + TreeView1.Selected.Text
 else
   StatusBar1.Panels[0].Text := "   Поле не выбрано ...";
end;

procedure TForm1.TreeView1DblClick(Sender: TObject);
var
 Str: String;
begin
 if Assigned(TreeView1.Selected) then
 begin
   Str := TreeView1.Selected.Text;
   if Copy(Str, 1, 2) <> "\\" then Exit;
   if Pos(" IP:", Str) <> 0 then
     ShellExecute(Handle, "explore", PChar(Copy(Str, 1, Pos(" IP:", Str))), nil, nil, SW_SHOW)
   else
     ShellExecute(Handle, "explore", PChar(Str), nil, nil, SW_SHOW);
 end;
end;

end.



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2004.08.29;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.039 c
3-1091687674
РВА
2004-08-05 10:34
2004.08.29
Постаничное суммирование в FRep


1-1092226114
TEXHAPb
2004-08-11 16:08
2004.08.29
Простой вопрос: C -> Pascal


14-1092189396
Думкин
2004-08-11 05:56
2004.08.29
С днем рождения! 11 августа


1-1092286606
Кириешки
2004-08-12 08:56
2004.08.29
Как остановить процедуру


14-1091929218
Logon
2004-08-08 05:40
2004.08.29
Что представляют из себя Log-On скрипты NT? (исполняемый файл?)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский