Вы можете попробовать этот код. Я без проблем использовал его под 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 = record Year: 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 then MessageDlg('Пользователь ' + SomeUser + ' на этом сервере не обнаружен!', mtError, [mbOK], 0); Result := StrPas(FullName); end; end. |
[000201]