Советы по Delphi

         

Получение сетевого имени пользователя


Вы можете попробовать этот код. Я без проблем использовал его под Netware LAN в течение долгого времени. Работа программы зависит от наличия NWCALLS.DLL на машине пользователя, но если он использовал сеть хоть раз, данная библиотека должна присутствовать на его машине.

unit GetLogin;

{Данный модуль инкапсулирует несколько внешних функций библиотеки NWCALLS.DLL}
{Создан на основе кода Григория Трубецкого}
{Модуль содержит функции, возвращающие Netware User ID}
{и полное имя пользователя.}

interface
uses
SysUtils, Messages, Dialogs;function GetUserLogin: string;
function GetUserFullName( SomeUser: string): string;

implementation
type
NWTimeStamp = recordYear: byte;Month: byte;Day: byte;Hour: byte;Minute: byte;Second: byte;DayOfWeek: byte;end;
{Netware API - требуется NWCALLS.DLL}function NWGetDefaultConnectionID(var Connection: word): word;far; external 'NWCALLS';
function NWGetConnectionNumber(Connection: word; var ConnectionNumber:word): word;
far; external 'NWCALLS';
function NWGetConnectionInformation(Connection: word;ConnectionNumber: word;ObjectName: pchar;var ObjectType: word;var ObjectID: word;var LoginTime: NWTimeStamp):word;far; external 'NWCALLS';
function NWReadPropertyValue(Connection: word;ObjectName: pChar;ObjectType: word;PropertyName: pChar;DataSetIndex: byte;DataBuffer: pChar;var More: byte;var Flags: byte): word;far; external 'NWCALLS';{ конец секции работы с Netware API }
function GetUserLogin: string;
var
ConnectionID: word;ConnectionNumber: word;RC: word;Name: array[0..50] of Char;ObjectType: word;ObjectID: word;LoginTime: NWTimeStamp;begin
RC := NWGetDefaultConnectionID(ConnectionID);RC := NWGetConnectionNumber(ConnectionID, ConnectionNumber);RC := NWGetConnectionInformation( ConnectionID,ConnectionNumber,Name,ObjectType,ObjectID,LoginTime);
Result := StrPas(Name);end;

function GetUserFullName( SomeUser: string): string;
{Реально имя пользователя является свойством 'IDENTIFICATON'.
Вы должны вызывать NWReadPropertyValue с параметрами (между прочим) вашего ConnectionID,
имени объекта (такое же, как и логин пользователя, сетевое имя которого мы пытаемся узнать)
и свойство name, которое нам необходимо получить, в нашем случае 'IDENTIFICATION'
(это и есть искомая величина - полное имя пользователя).}

var
ConnectionID: word;RC: word;Name: array[0..50] of Char;ObjectType: word;PropName: array[0..14] of Char;DataSetIndex: byte;FullName: array[0..127] of Char;More: byte;Flags: byte;begin
RC := NWGetDefaultConnectionID(ConnectionID);ObjectType := 256; {пользователь}StrPCopy(PropName, 'IDENTIFICATION');DataSetIndex := 1;StrPCopy(Name, SomeUser);RC := NWReadPropertyValue( ConnectionID,Name,ObjectType,PropName,DataSetIndex,FullName,More,Flags);if RC = 35324 thenMessageDlg('Пользователь ' + SomeUser + ' на этом сервере не обнаружен!',mtError, [mbOK], 0);Result := StrPas(FullName);end;

end.

[000201]



Содержание раздела