|
![]() |
#1 |
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. |
|
![]() |
#2 |
Участник
|
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 ""; } |
|
Теги |
winapi, домен, доменный пользователь, пользователи, программно |
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|