Войти

Показать полную графическую версию : Получить ФИО пользователя учётной записи


blackeangel
17-03-2019, 12:08
Как получить ФИО пользователя?
Например, логин юзера ivanov_ii, а в меню пуск написано Иванов Иван Иваныч, вот это как раз и надо получить.
В гугле говорят, что надо юзать LDAP. Однако, реальных примеров не встречал.
Есть такое:

hr = ADsGetObject(L"LDAP://CN=computers,DC=mydomain,DC=local", IID_IADsContainer, (void**) &pCont );

В Borland C++ Builder 6.0 ругается на

(void**) &pCont

Знаю, что на VB6 это выглядит так:

Sub asdas()
Set SI_ = CreateObject("ADSystemInfo")
Set Un_ = GetObject("LDAP://" & SI_.UserName)
UZ_ = Un_.DisplayName
msgbox UZ_
End Sub

Оно возвращает ФИО из учётной записи пользователя, вошедшего в домен. А не его логин.

Busla
17-03-2019, 19:48
Чтобы продать что-нибудь ненужное, надо сначала купить что-нибудь ненужное © Матроскин

Чтобы получить ФИО пользователя нужно сначала, чтобы кто-то куда-то его вписал. Расскажите, куда у вас по регламенту вписывают ФИО?

blackeangel
17-03-2019, 19:55
Чтобы получить ФИО пользователя нужно сначала, чтобы кто-то куда-то его вписал. Расскажите, куда у вас по регламенту вписывают ФИО? »
Честно, не знаю куда его выписывают админы, да это не суть важно. Надо получить фио текущего юзера, причём логин и домен неизвестны.
Код от vb6 всё каким то чудом определяет сам.

Iska
17-03-2019, 21:05
blackeangel, никакого чуда.

Вы не можете перевести приведённый Вами пример с использованием IADsADSystemInfo (https://docs.microsoft.com/ru-ru/windows/desktop/ADSI/iadsadsysteminfo-property-methods) с VB на C++?

blackeangel
17-03-2019, 21:07
Iska, Здравствуйте) Верно. Даже не знаю с какого конца заходить.

Iska
17-03-2019, 21:24
blackeangel, ну, вот посмотрите частичный пример на C++:
The following C++ code example retrieves the Windows system information. For brevity, error checking is omitted.
#include <activeds.h>
#include <stdio.h>

int main()
{
HRESULT hr;

hr = CoInitialize(NULL);

IADsADSystemInfo *pSys;
hr = CoCreateInstance(CLSID_ADSystemInfo,
NULL,
CLSCTX_INPROC_SERVER,
IID_IADsADSystemInfo,
(void**)&pSys);

BSTR bstr;
hr = pSys->get_UserName(&bstr);
if (SUCCEEDED(hr)) {
printf("User: %S\n", bstr);
SysFreeString(bstr);
}

hr = pSys->get_ComputerName(&bstr);
if (SUCCEEDED(hr)) {
printf("Computer: %S\n", bstr);
SysFreeString(bstr);
}

hr = pSys->get_DomainDNSName(&bstr);
if (SUCCEEDED(hr)) {
printf("Domain: %S\n", bstr);
SysFreeString(bstr);
}

hr = pSys->get_PDCRoleOwner(&bstr);
if (SUCCEEDED(hr)) {
printf("PDC Role owner: %S\n", bstr);
SysFreeString(bstr);
}

if(pSys) {
pSys->Release();
}

CoUninitialize();
return 0;
}
по вышеприведённой ссылке.

P.S. Для преобразований видов имён можно пользовать IADsNameTranslate | Microsoft Docs (https://docs.microsoft.com/en-us/windows/desktop/api/iads/nn-iads-iadsnametranslate).

blackeangel
17-03-2019, 21:59
Iska, это уже видел, и очень плохо

Minimum supported client Windows Vista

А надо WinXP.

И так же непонятно, что подавать, какие аргументы? Или ничего не надо?

Iska
17-03-2019, 22:30
blackeangel, я не знаю, как там на C++, но на WSH у меня сие работало ещё на Windows 2000.




© OSzone.net 2001-2012