Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.08.29;
Скачать: CL | DM;

Вниз

локальные сети, 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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.022 c
9-1083680150
min
2004-05-04 18:15
2004.08.29
Подскажите плз алгоритм полёта пули на OpenGl!!!


1-1092216937
Denis
2004-08-11 13:35
2004.08.29
В каком случае выполняется событие OnShow при создании формы?


3-1091265633
faost
2004-07-31 13:20
2004.08.29
Ищу более удобный DBGrid


1-1092203163
RDen
2004-08-11 09:46
2004.08.29
по StringGrid


1-1092590461
hawkins
2004-08-15 21:21
2004.08.29
У меня проблема с MDI окном...