Форум: "Сети";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.02.18;
Скачать: [xml.tar.bz2];




Вниз

Имя пользователя на сетевом компьютере 


Алиса   (2001-10-16 11:14) [0]

Здравствуйте!
У меня сеть под WNT и W98.
Подскажите, как можно получить login на сетевом компьютере?
Сервер под WNT. Реестр WNT я подключаю к своему, а W98 - нет.



Kornet   (2001-10-16 12:41) [1]

Алиса, а поподробнее можно?
Что ты имеешь в виду говоря login на сетевом компьютере?
Это случайно не имя пользователя?
Ну и какой реестр, зачем его подключать.
И к своему - чего? Компьютеру, реестру???
Попродробнее опиши ситуацию. :)



Алиса   (2001-10-16 14:36) [2]

Прошу прощение за некоректный вопрос!
Да, мне нужно именно имя пользователя, вошедшего в компьютер, но его необходимо определять с сервера.
Задача стоит такая. Три раза в день необходимо определить какие компы включены и какие пользователи за ними работают. Всю сеть я определяю с помощью WNetEnumResource, а вот при использовании NetUserGetInfo возникли проблеммы.



Kirill   (2001-10-17 15:53) [3]

Ну и что, никто не поможет девушке? А заодно и мне с этим вопросом?
Будем ждать.



Knight   (2001-10-17 19:04) [4]

Помогите мне тоже, интересно!



DimonF   (2001-10-17 22:31) [5]

Привет!!! В чем запара??? :)))
Вот небольшой примерчик!!! Может, поможет...

Получение списока компьютеров, подключенных к сети.

unit NetUtils;
interface
uses Windows, Classes;
function GetContainerList(ListRoot:PNetResource):TList; Type
{$H+}
PNetRes = ^TNetRes;
TNetRes = Record
dwScope : Integer;
dwType : Integer;
dwDisplayType : Integer;
dwUsage : Integer;
LocalName : String;
RemoteName : String;
Comment : String;
Provider : String;
End;
{H-}

implementation
uses SysUtils;
type
PnetResourceArr = ^TNetResource; {TNetResource - это запись,
эквивалентная TNetRes, за исключением того, что
вместо типов string там типы PChar. }

function GetContainerList(ListRoot:PNetResource):TList;
{возвращает список сетевых имён с подуровня ListRoot, каждый
элемент списка TList - это PNetRes, где поле RemoteName определяет
соответственно сетевое имя элемента списка. Если ListRoot=nil, то
возвращается самый верхний уровень типа:
1. Microsoft Windows Network
2. Novell Netware Network
Чтобы получить список доменов/рабочих групп сети Microsoft, нужно
вызвать эту функцию второй раз, передав ей в качестве параметра,
соответствующий элемент списка, полученного при первом её вызове.
Чтобы получить список компьютеров домена - вызвать третий раз...}
{Единственное, я не знаю как узнать имя текущего домена.}
Var
TempRec : PNetRes;
Buf : Pointer;
Count,
BufSize,
Res : DWORD;
lphEnum : THandle;
p : PNetResourceArr;
i : SmallInt;
NetworkList : TList;
Begin
NetworkList := TList.Create;
Result:=nil;
BufSize := 8192;
GetMem(Buf, BufSize);
Try
Res := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_DISK,
RESOURCEUSAGE_CONTAINER{0}, ListRoot,lphEnum);
{в результате получаем ссылку lphEnum}
If Res <> 0 Then Raise Exception(Res);
Count := $FFFFFFFF; {требуем выдать столько записей в
список, сколько есть}
Res := WNetEnumResource(lphEnum, Count, Buf, BufSize); {в буфере Buf - списочек
в виде массива указателей на структуры типа TNetResourceArr
а в Count - число этих структур}
If Res = ERROR_NO_MORE_ITEMS Then Exit;
If (Res <> 0) Then Raise Exception(Res);
P := PNetResourceArr(Buf);
For I := 0 To Count - 1 Do
Begin //Требуется копирование из буфера, так как он
New(TempRec); //действителен только до следующего вызова функций группы
WNet
TempRec^.dwScope := P^.dwScope;
TempRec^.dwType := P^.dwType ;
TempRec^.dwDisplayType := P^.dwDisplayType ;
TempRec^.dwUsage := P^.dwUsage ;
TempRec^.LocalName := StrPas(P^.lpLocalName); {имеются ввиду вот эти указатели}
TempRec^.RemoteName := StrPas(P^.lpRemoteName); {в смысле - строки PChar}
TempRec^.Comment := StrPas(P^.lpComment);
TempRec^.Provider := StrPas(P^.lpProvider);
NetworkList.Add(TempRec);
Inc(P);
End;
Res := WNetCloseEnum(lphEnum);
{а следующий вызов - вот он!}
If Res <> 0 Then Raise Exception(Res);
Result:=NetWorkList;
Finally
FreeMem(Buf);
End;
End;
end.

Пример:

uses NetUtils;
var
List:TList;
begin
List:=TList.Create;
List:=GetContainerList(nil); // Получили список сетей.
// Как правило первая - сеть Microsoft
List:=GetContainerList(List[0]); //Получаем список доменов сети
for i:=0 to List.Count-1 do
if PNetRes(List[i])^.RemoteName="YourDomain" then
begin
List:=GetContainerList(List[i]);
Break;
end;
// теперь в List - список включённых компьютеров
// в домене/рабочей группе YourDomain. Каждый элемент списка имеет
// тип PNetRes. Само имя компьютера можно получить List[i])^.RemoteName
for i := 0 to List.Count-1 do
writeln(PNetRes(List[i])^.RemoteName);
end.



Алиса   (2001-10-18 10:44) [6]

DimonF!
Спасибо, но мне необходимо узнать не Hostы компьютеров, а имена пользователей, которые работают на них.
Уточню вопрос еще раз.
На своем компе имя пользователя - GetUserName, на удаленном - NetUserGetInfo. Вот именно с этой функцией у меня возникли проблеммы. Если у нее есть альтернатива - хорошо, если нет - то как с ней работать?



Kirill   (2001-10-19 14:03) [7]

Советов нет?
Люди! Помогите! Пожалуйста!



Kornet   (2001-10-22 16:52) [8]

Насколько мне известно, то считать эти данные с сервера или не возможно, либо крайне затруднительно. А почему бы не попробывать менее красивый вариант? Например инсталяции программы-клиента на удалённых компьютерах? Или ещё проще, написанием скрипта на клиенте, который бы в расшаренную папку выдавал имя юзвера?

Алиса: А почему не получилось использовать NetUserGetInfo? В чём это выразилось?



Tosov   (2001-10-25 21:23) [9]

Имя пользователя на сетевом компьютере [D5, ->Win95/98<- не получится, NT4]
Вместь NetUserGetInfo можно использовать NetWkstaUserEnum, но для работы с этой функцией нужны права админа + она должна показывать все логины, работающие за компом, даже под чьими логинами запущена прога с использованием RusAs...
Пример здесь http://delphi.xonix.ru/faq/users/remoteuser01.shtml



Kirill   (2001-10-26 13:11) [10]

2Tosov:
Большое спасибо!



Алиса   (2001-11-26 12:45) [11]

Спасибо за помощь. Извиняюсь за то, что поздно, но отпуск - святое дело.




Форум: "Сети";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.02.18;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.75 MB
Время: 0.016 c
6-57171           Gunner                2001-11-13 16:15  2002.02.18  
Кому не слабо ! :)


7-57228           ATeam                 2001-10-25 15:01  2002.02.18  
Как скопировать файл в clipboard.


6-57161           Lana                  2001-11-27 02:34  2002.02.18  
Треб. совет!


14-57207          McSimm                2001-12-27 16:45  2002.02.18  
Мне понравилось:


6-57182           SemFLY                2001-11-27 01:52  2002.02.18  
TSeverSocket и TСlientSocket через прокси ?!?!