05.08.2008, 17:08 | #1 |
Участник
|
Получить имя пользователя в формате DOMAIN\user
А никто случаем не делал ф-ю, чтобы имя юзера выдавала вместе с доменом ?
В WinAPI есть вроде такая - LookupAccountNameA, но что-то у меня не получается ее правильно объявить - параметров дофига, не пойму что куда подставлять |
|
05.08.2008, 17:44 | #2 |
Участник
|
вот пример:
http://www.codersource.net/win32_user_name.html Цитата:
The GetUserName function retrieves the user name of the current thread. This is the name of the user currently logged onto the system.
Цитата:
BOOL GetUserName( LPTSTR lpBuffer, LPDWORD nSize);
__________________
AxAssist 2012 - Productivity Tool for Dynamics AX 2012/2009/4.0/3.0 |
|
05.08.2008, 17:49 | #3 |
Боец
|
А какие пользователи интересуют? Есть в 4-ке функциональность импорта юзеров из выбранных доменом (Администрирование->Пользователи->Импорт). Там используется класс AxaptaUserManager. Посмотрите, на вскидку с вашей задачей он справится.
|
|
05.08.2008, 18:18 | #4 |
Участник
|
|
|
05.08.2008, 18:54 | #5 |
Участник
|
В коде, который по ссылке, разве не это делается?
__________________
AxAssist 2012 - Productivity Tool for Dynamics AX 2012/2009/4.0/3.0 |
|
05.08.2008, 18:54 | #6 |
Administrator
|
Сталкивался я с этим правда не в Аксапте, а в Аксессе. Нарыл я на бескрайних просторах следующий код на VB:
Код: ' Расширенное имя польователя (в формате Домен\Пользователь) Private Declare Function GetUserNameAPI Lib "secur32.dll" Alias "GetUserNameExA" (ByVal NameFormat As Long, ByVal lpNameBuffer As String, nSize As Long) As Long Public Function GetWindowsUser() As String Dim sBuffer As String Dim lLen As Long sBuffer = Space(255 + 1) lLen = Len(sBuffer) If CBool(GetUserNameAPI(2, sBuffer, lLen)) Then GetWindowsUser = StrZ(sBuffer) Else GetWindowsUser = "" End If End Function А код, приведенный по ссылке - слишком длинный Его читать долго Функция StrZ - она невстроенная - она просто отсекает для VB символ с кодом 0. Но для полноты картины - приведу и эту функцию: Код: ' Отсекание символа с кодом 0 Public Function StrZ(par As String) As String Dim nSize As Long, i As Long, Rez As String nSize = Len(par) i = InStr(1, par, vbNullChar) - 1 If i > nSize Then i = nSize If i < 0 Then i = nSize StrZ = Mid(par, 1, i) End Function
__________________
Возможно сделать все. Вопрос времени Последний раз редактировалось sukhanchik; 05.08.2008 в 18:59. |
|
06.08.2008, 11:05 | #7 |
Участник
|
getUserNameEx - то что надо, получилось вот так -
X++: // Возвращает полное имя пользователя - DOMAIN\user #define.structSize(255+1) client static str getUserNameEx() { DLLFunction _getUserNameEx ; Binary bSize = new Binary(#SizeOfInt); Binary bStr = new Binary(#structSize); DLL _DLL = new DLL("secur32"); ; bSize.dWord(#Offset0,#structSize); _getUserNameEx = new DLLFunction(_DLL, 'GetUserNameExA'); _getUserNameEx.returns(ExtTypes::DWord); _getUserNameEx.arg(ExtTypes::DWord, ExtTypes::Pointer, ExtTypes::Pointer); if (_getUserNameEx.call(2,bStr,bSize)) { return bStr.string(#Offset0); } else return ""; } |
|