Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Получить ФИО пользователя учётной записи (http://forum.oszone.net/showthread.php?t=339712)

blackeangel 17-03-2019 12:08 2863511

Получить ФИО пользователя учётной записи
 
Как получить ФИО пользователя?
Например, логин юзера 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 2863626

Чтобы продать что-нибудь ненужное, надо сначала купить что-нибудь ненужное © Матроскин

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

blackeangel 17-03-2019 19:55 2863630

Цитата:

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

Честно, не знаю куда его выписывают админы, да это не суть важно. Надо получить фио текущего юзера, причём логин и домен неизвестны.
Код от vb6 всё каким то чудом определяет сам.

Iska 17-03-2019 21:05 2863644

blackeangel, никакого чуда.

Вы не можете перевести приведённый Вами пример с использованием IADsADSystemInfo с VB на C++?

blackeangel 17-03-2019 21:07 2863645

Iska, Здравствуйте) Верно. Даже не знаю с какого конца заходить.

Iska 17-03-2019 21:24 2863647

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.

blackeangel 17-03-2019 21:59 2863653

Iska, это уже видел, и очень плохо
Цитата:

Minimum supported client Windows Vista
А надо WinXP.

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

Iska 17-03-2019 22:30 2863659

blackeangel, я не знаю, как там на C++, но на WSH у меня сие работало ещё на Windows 2000.


Время: 06:19.

Время: 06:19.
© OSzone.net 2001-