Как получить полное имя зарегистрированного пользователя в Windows? - PullRequest
4 голосов
/ 09 августа 2010

Как получить полное имя вошедшего в систему пользователя (имя, которое он / она ввел как свое настоящее имя), используя Windows API или что-то еще?Например, как получить «Джон Смит», а не «Джон» (как бы его имя пользователя).

GetUserName (...) не выполняет работу, поскольку возвращаетимя пользователя, а не полное имя.

Ответы [ 6 ]

4 голосов
/ 09 августа 2010

Вы пробовали GetUserNameEx (NameDisplay, ...)?

3 голосов
/ 09 августа 2010

Быстрый Google показывает, что NetUserGetInfo должен сделать это. Это не похоже на самый простой в мире API для использования.

Я думаю, что ваш уровень равен 10, что возвращает структуру USER_INFO_10 , содержащую, среди прочего, usri10_full_name.

Убедитесь, что вы не забыли освободить структуру, когда закончите, используя NetApiBufferFree !

0 голосов
/ 23 апреля 2014

NetQueryDisplayInformation должна помочь. Поле usri1_full_name даст полное имя

0 голосов
/ 14 сентября 2010

Я считаю, что нашел связанный ответ, который работает лучше, чем один GetUserNameEx, то есть я могу обработать некоторые случаи, когда GetUserNameEx не удается.

Мой альтернативный ответ здесь , включаяПример кода для Delphi.

Короче говоря, если GetUserInfoEx (3, ...) завершается неудачно, прочитайте GetUserInfoEx (2, ...), который возвращает имя в форме «имя_машины \ имя пользователя», которое вы можетезатем перейдите к функциям NetUserInfo в NETAPI32.dll, которые будут считывать локальную базу данных SAM, в которой хранится полное имя пользователя, если они установили его в локальной базе данных SAM.Конечно, многие домашние пользователи, не являющиеся доменами, никогда не настраивали это, поэтому другие ответы здесь, вероятно, также дадут некоторые подсказки.

0 голосов
/ 09 августа 2010

Я нашел несколько мест в реестре Windows с моим адресом электронной почты или полным именем:

  1. HKEY_CURRENT_USER \ Software \ Microsoft \ Office \ Common \ UserInfo имеет имя пользователя, которое содержит мое полное имя.
  2. KEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer имеет Имя пользователя для входа в систему , которое содержит мою электронную почту.
  3. HKEY_LOCAL_MACHINE \ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ \ Microsoft \ Windows NT \ CurrentVersion \ Winlogon имеет DefaultUserName , в котором содержится моя электронная почта.

Первый, очевидно, требует Microsoft Officeбыть установленным и что пользователь ввел свое имя в настройках Office.Второй и третий более надежны, но вместо этого содержат электронную почту, но электронная почта также является хорошей (или лучшей) идентификацией, чем полное имя.

0 голосов
/ 09 августа 2010

Что ж, если пользователь никогда не вводил его, вы не сможете его получить.Вы можете искать установленные почтовые программы и вежливо запрашивать у них информацию, но это плохая идея по многим причинам.

Вот ваш лучший способ: получить имя, введенное пользователем при регистрации копии Windows.Это в реестре.Точное местоположение отличается в разных версиях Windows, но в последних версиях оно находится на HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion (а в Windows 95/98 / ME на HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion).

Там вы найдете RegisteredOwner, которыйгде должен был ввести имя.Очевидно, что если это компьютер компании и компьютер был настроен ИТ-отделом, то очень часто можно найти стандартизированную строку компании.И, конечно же, многие люди будут вводить такие имена, как «Джо Сикспак» или «Cracked by Quartex».Тем не менее, это как можно ближе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...