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

Вниз

how to get all host names in local network   Найти похожие ветки 

 
poiuytrewq ©   (2002-06-06 21:24) [0]

есть локальная сеть (допустим 10 компов).
нужно узнать host names этих десяти компов
пожалуйста source code :)


 
Song ©   (2002-06-06 21:40) [1]

В FAQ есть.


 
poiuytrewq ©   (2002-06-06 22:26) [2]

Я так понимаю, ты имеешь ввиду приведенную ниже процедуру?
HELP HELP
При ее использовании вылезает ошибка(и):

[Error] Unit1.pas(278): Types of actual and formal var parameters must be identical
[Error] Unit1.pas(281): Types of actual and formal var parameters must be identical

< (278 - сторока ) и (281 строка) смотри в коде ниже >


//////////////////////

Как найти все компьютеры в рабочей группе?

var
Computer : Array[1..500] of String[25];
ComputerCount : Integer;

procedure FindAllComputers(Workgroup: String);
Var
EnumHandle : THandle;
WorkgroupRS : TNetResource;
Buf : Array[1..500] of TNetResource;
BufSize : Integer;
Entries : Integer;
Result : Integer;

begin
ComputerCount := 0;
Workgroup := Workgroup + #0;
FillChar(WorkgroupRS, SizeOf(WorkgroupRS) , 0);
With WorkgroupRS do begin
dwScope := 2;
dwType := 3;
dwDisplayType := 1;
dwUsage := 2;
lpRemoteName := @Workgroup[1];
end;

WNetOpenEnum( RESOURCE_GLOBALNET,
RESOURCETYPE_ANY,
0,
@WorkgroupRS,
EnumHandle );

Repeat
Entries := 1;
BufSize := SizeOf(Buf);

Result :=
WNetEnumResource( EnumHandle,
<278> Entries,
<279> @Buf,
<280> BufSize );
<281> If (Result = NO_ERROR) and (Entries = 1) then begin
Inc( ComputerCount );
Computer[ ComputerCount ] := StrPas(Buf[1].lpRemoteName);
end;
Until (Entries <> 1) or (Result <> NO_ERROR);

WNetCloseEnum( EnumHandle );
end; { Find All Computers }

/////////////


 
poiuytrewq ©   (2002-06-06 23:09) [3]

Реально работающий вариант < :)>

var
// Namen der Rechner im Netz (eingewahlte)
Host : Array[1..500] of String[25];
// Provider des Host
Provider : Array[1..500] of String[25];
// Anzahl der Rechner im Netz
HostCount: Integer;

procedure TForm1.FindAllComputers(Workgroup:ShortString);
var H: THandle;
I,E: Integer;
N: TNetResource;
Buf: Array[1..500] of TNetResource;
BufSize: Integer;
begin
HostCount := 0; //Hostanzahl auf 0 setzen
Workgroup := Workgroup+#0;
FillChar(N,SizeOf(TNetResource),0); //N mit 0-en Fullen mit der Gro?e von TNetResource
With N do
begin
dwScope := RESOURCE_GLOBALNET; //alle aktiven Nutzer des Netzwerkes
dwType := RESOURCETYPE_ANY; //alle Resourcen des Netzwerkes(Disk&Printer)
dwUsage := RESOURCEUSAGE_CONTAINER;
lpRemoteName := @Workgroup[1];
end;
WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY,0,@N,H); //Offnen von Enum(H)
Repeat
E := 1;
BufSize := SizeOf(Buf);
I := WNetEnumResource(H,Cardinal(E),@Buf,Cardinal(BufSize));
If (I = NO_ERROR) and (E = 1) then //Buf ist nicht vollig abgearbeitet
begin
Inc(HostCount);
Host[HostCount] := StrPas(Buf[1].lpRemoteName); //Welcher Rechnername
Provider[HostCount] := StrPas(Buf[1].lpProvider); //Welcher Dienst
end;
Until(E <> 1) or (I <> NO_ERROR); //Buf ist vollig abgearbeitet
WNetCloseEnum(H) //Schlie?en von Enum(H)
end;



procedure TForm1.Button1Click(Sender: TObject);
Var i: integer;
begin
FindAllComputers(Edit3.Text);
StringGrid1.RowCount := HostCount+1;
for i := 1 to HostCount do
begin
StringGrid1.Cells[0,i] := Host[i];
StringGrid1.Cells[2,i] := Provider[i];
end;
end;


 
poiuytrewq ©   (2002-06-06 23:13) [4]

правда теперь нужно вводить (в EDIT3) название рабочей группы

и следоваетельно ВОПРОС:


как определить КАКИЕ есть рабочие группы у компа

HELP HELP


 
serd_hhc ©   (2002-06-15 15:05) [5]

Я уже как-то спрашивал, никто не знает. ЧЁРТ.


 
Егоров Николай   (2002-06-15 20:10) [6]

unit fmMain;

//******************************************************************************
// Walk over network
// WNetOpenEnum example
//
// (c) 2000, Alexey Dynnikov <aldyn@aldyn.ru>
// http://www.aldyn.ru/
// Delphi components, examples and articles: services, performance, security...
//
// Feel free to use any or all source code, provided you retain the
// credit under my name.
//******************************************************************************

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ComCtrls;

type
TMainForm = class(TForm)
TV: TTreeView;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
MainForm: TMainForm;


 
Егоров Николай   (2002-06-15 20:11) [7]

implementation

{$R *.DFM}


const InitialSize = $1; // Any positive value is acceptable.

type
TNetEnumThread = class(TThread)
ChildNode: String;
TreeNode: TTreeNode;
procedure AddChildNode;
procedure Execute; override;
procedure LoadNetNode(NetNode: PNetResourceA);
end;

procedure TNetEnumThread.Execute;
begin
TreeNode:=nil;
LoadNetNode(nil);
end;

procedure TNetEnumThread.AddChildNode;
begin
TreeNode:=MainForm.TV.Items.AddChild(TreeNode,ChildNode);
end;

procedure TNetEnumThread.LoadNetNode(NetNode: PNetResourceA);
var hEnum : THandle;
Count,BufSize, Usage: DWORD;
NR,Buf: PNetResourceA;
R: Integer;
CurrentNode: TTreeNode;
begin
R:=WNetOpenEnum(RESOURCE_GLOBALNET,RESOURCETYPE_ANY,0{RESOURCEUSAGE_CONTAINER},NetNode,hEnum);
if R <> NO_ERROR then exit;

BufSize:=InitialSize; GetMem(Buf,BufSize);
try
while True do
begin
Count:=$FFFFFFFF; // I wish to read ALL items
R:=WNetEnumResource(hEnum,Count, Buf, BufSize);

if R = ERROR_MORE_DATA then // Oops ! The InitialSize is too small !
begin
Count:=$FFFFFFFF; // I wish to read ALL items
FreeMem(Buf); GetMem(Buf,BufSize);
R:=WNetEnumResource(hEnum,Count, Buf, BufSize);
end;

if R = ERROR_NO_MORE_ITEMS then Break; // All items are processed
if R <> NO_ERROR then Abort; // R is the error code. Process it!

NR:=Buf;
while Count > 0 do
begin
CurrentNode:=TreeNode; // Remember current position

if NR.lpRemoteName <> nil then
ChildNode:=StrPas(NR.lpRemoteName)
else
ChildNode:="";

// Gather node information and display it in textual form
ChildNode:=ChildNode+" DisplayType=";
case NR.dwDisplayType of


 
Егоров Николай   (2002-06-15 20:12) [8]

RESOURCEDISPLAYTYPE_DOMAIN: ChildNode:=ChildNode+"Domain";
RESOURCEDISPLAYTYPE_GENERIC: ChildNode:=ChildNode+"Generic";
RESOURCEDISPLAYTYPE_SERVER: ChildNode:=ChildNode+"Server";
RESOURCEDISPLAYTYPE_SHARE: ChildNode:=ChildNode+"Share";
RESOURCEDISPLAYTYPE_GROUP: ChildNode:=ChildNode+"Group";
RESOURCEDISPLAYTYPE_NETWORK: ChildNode:=ChildNode+"Network";
RESOURCEDISPLAYTYPE_ROOT: ChildNode:=ChildNode+"Root";
RESOURCEDISPLAYTYPE_SHAREADMIN: ChildNode:=ChildNode+"ShareAdmin";
RESOURCEDISPLAYTYPE_DIRECTORY: ChildNode:=ChildNode+"Directory";
RESOURCEDISPLAYTYPE_TREE: ChildNode:=ChildNode+"Tree";
RESOURCEDISPLAYTYPE_NDSCONTAINER: ChildNode:=ChildNode+"NDS Container";
else
ChildNode:=ChildNode+"? ("+IntToStr(NR.dwDisplayType)+")";
end;

if NR.dwScope = RESOURCE_GLOBALNET then // dwUsage member is usable in this case only
begin
ChildNode:=ChildNode+" Usage=";

Usage:=NR.dwUsage;
if (Usage and RESOURCEUSAGE_CONNECTABLE) <> 0 then ChildNode:=ChildNode+"Connectable;";
Usage:=Usage and not RESOURCEUSAGE_CONNECTABLE;

if (Usage and RESOURCEUSAGE_CONTAINER) <> 0 then ChildNode:=ChildNode+"Container;";
Usage:=Usage and not RESOURCEUSAGE_CONTAINER;

if (Usage and RESOURCEUSAGE_NOLOCALDEVICE) <> 0 then ChildNode:=ChildNode+"NoLocalDevice";
Usage:=Usage and not RESOURCEUSAGE_NOLOCALDEVICE;

if (Usage and RESOURCEUSAGE_SIBLING) <> 0 then ChildNode:=ChildNode+"Sibling";
Usage:=Usage and not RESOURCEUSAGE_SIBLING;

if (Usage and RESOURCEUSAGE_ATTACHED) <> 0 then ChildNode:=ChildNode+"Attached";
Usage:=Usage and not RESOURCEUSAGE_ATTACHED;

if (Usage and RESOURCEUSAGE_RESERVED) <> 0 then ChildNode:=ChildNode+"Reserved";
Usage:=Usage and not RESOURCEUSAGE_RESERVED;

if Usage <> 0 then ChildNode:=ChildNode+"? ("+IntToHex(Usage,8)+")";
end;

// Check for dwType value
ChildNode:=ChildNode+" Type=";
case NR.dwType of
RESOURCETYPE_ANY: ChildNode:=ChildNode+"Any";
RESOURCETYPE_DISK: ChildNode:=ChildNode+"Disk";
RESOURCETYPE_PRINT: ChildNode:=ChildNode+"Print";
else
ChildNode:=ChildNode+"?";
end;

// Analyze dwScope member
ChildNode:=ChildNode+" Scope=";
case NR.dwScope of
RESOURCE_CONNECTED: ChildNode:=ChildNode+"Connected";
RESOURCE_GLOBALNET: ChildNode:=ChildNode+"Globalnet";
RESOURCE_REMEMBERED: ChildNode:=ChildNode+"Remembered";
else
ChildNode:=ChildNode+"?";
end;

// Add new node to the tree view - and do it in the main thread
Synchronize(AddChildNode);

// Process subnodes
LoadNetNode(NR);

TreeNode:=CurrentNode; // restore current position
// after modification

// Go to the next record
INC(NR);
DEC(Count);
end;
end;
finally
WNetCloseEnum(hEnum); // Close handle
FreeMem(Buf); // Free memory1
end;
end;


procedure TMainForm.FormCreate(Sender: TObject);
begin
TNetEnumThread.Create(False);
end;

end.


 
serd_hhc ©   (2002-06-18 09:23) [9]

А можно ли вариант поменьше. Ведь наверное можно заставить Windows сделать это вместо тебя.
п.с.
Я пишу маленькое консольное приложение.


 
Malder ©   (2002-06-18 13:22) [10]

троян то есть =)


 
sizmrebi ©   (2002-06-18 13:38) [11]

Ia pereslal Gotovuiu programu so svoimi kodami na tvoi email


 
serd_hhc ©   (2002-06-18 13:57) [12]

2sizmrebi>
prishli mne toje.
2Malder>
покаяние.
У нас в посёлке (городского типа т.е. ДЕРЕВНЯ) есть комп. клуб.
Так вот я этим ***** помогал (дело было летом) ну и играл на халяву (пол часа в день), а потом, он (голова), сказал, что лето кончилось, а значит и халява тоже. Мои постеры и журналы не отдают, играть - платно. Один раз пришёл с младшим братом поиграть, так админ (сын головы), крутился возле моего компа, что бы я что-нить не сделал... Ну вот у меня мысль и созрела... Наказать гадов!!!! С этих пор я и увлёкся вирусо-трояно(писательством and впариванием).
Принцип будет такой:
Пришёл (например мой друг), вставил дискету, запустил, вынул дискету. Трояно-вирус сам распространился, и в один ПРЕКРАСНЫЙ день убил W9x, прописав, например, в autoexec.bat комманды
"deltree /y @WinDIR" и "deltree /y C:\".
Если у кого уже есть хоть что-то готовое, помогите! Плз!


 
app ©   (2002-06-19 21:33) [13]

Попытки ответа на вопрос от 18.06.02 13:57 иначе как почтой будут пресекаться

Комодератор


 
hogus   (2002-07-04 21:28) [14]

В ответе !!poiuytrewq!!

Есть всего одна т.е. две ошибки

procedure FindAllComputers(Workgroup: String);
type DWORD = Longword;
Var
EnumHandle : THandle;
WorkgroupRS : TNetResource;
Buf : Array[1..500] of TNetResource;
BufSize : DWORD;
Entries : DWORD;
Result : Integer;

Переменые BufSize, Entries должны были быть DWORD


 
asmer   (2002-07-06 14:22) [15]

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

With WorkgroupRS do begin
dwScope := RESOURCE_GLOBALNET; //2
dwType := RESOURCETYPE_ANY; //3
dwDisplayType := RESOURCEDISPLAYTYPE_GENERIC; //1
dwUsage := RESOURCEUSAGE_CONTAINER; //2
lpLocalName := nil; //
lpRemoteName := nil; //@Workgroup[1]
lpComment := nil; //
lpProvider := "Microsoft Windows Network"; //
end;

p.s.: не помню точно, как NULL на делфи обозначается (по-моему, nil)... и, вроде, строки в паскале в другом формате хранятся, поентому "Microsoft Windows Network" надо привести к PChar... но суть от ентого не поменяется... (типа, я приверженец ассемблера и си, да простят меня участники форума...)
может, на какой-нить версии виндов ресурс "Microsoft Windows Network" локализован (например, ресурс "Служба терминалов Microsoft" в английской версии звучит по-другому :)), но у меня в русской версии XP ентим способом находятся все рабочие группы (в нашей сети их две :))...


 
FUCKER   (2002-07-07 22:59) [16]




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

Текущий архив: 2002.09.12;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.017 c
3-35614
Sirus
2002-08-22 12:08
2002.09.12
Почему TDateField.Value возвращает неправильные значения???


4-35958
Igor_Z
2002-07-22 14:19
2002.09.12
Отключение запуска всех приложений при клике по иконкам файлов


6-35837
Landgraph
2002-07-08 10:26
2002.09.12
Socket


1-35811
978658473
2002-09-01 12:25
2002.09.12
Как вызвать форму (Form2)?


1-35783
Peroon
2002-08-31 15:12
2002.09.12
как программно в компонент Image загрузить изображение из ImageLi