Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 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]

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



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

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

Наверх





Память: 0.48 MB
Время: 0.006 c
14-57195
zero
2001-12-28 11:38
2002.02.18
RxLib и Delphi6.0


3-57020
Matvey
2002-01-22 20:33
2002.02.18
Access - не могу правильно установить Alias или что-то еще...


1-57082
Злой_Гном
2002-02-01 18:12
2002.02.18
Помогите положить ProgressBar в StatusBar.Panels


3-57018
Dinara
2002-01-24 21:17
2002.02.18
Приложение с БД


14-57190
fliz
2001-12-27 16:50
2002.02.18
Путин ONLINE





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский