Получение имя пользователя, работающего на заданном компе

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Получение имя пользователя, работающего на заданном компе

Сообщение Viper » 11.03.2006 (Сб) 9:31

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

Собственно вопрос, как получить имя пользователя реально работающего на конкретном компе?

З.Ы. Работает же как то команда nbtstat -a?
Весь мир матрица, а мы в нем потоки байтов!

Mizin Alex
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 50
Зарегистрирован: 12.06.2004 (Сб) 9:46
Откуда: Россия , Ивдель

Сообщение Mizin Alex » 11.03.2006 (Сб) 12:20

!Viper!
Dim WSHNetwork
Set WSHNetwork = CreateObject("WScript.Network")
Me.caption="Current user: " & WSHNetwork.UserName
Set WSHNetwork = Nothing

С ув. Alex

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 11.03.2006 (Сб) 12:26

И это будет пользователь компьютера на котором этот код выполняется, что несколько не то что хочется
Весь мир матрица, а мы в нем потоки байтов!

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 11.03.2006 (Сб) 12:41

Mizin Alex

Не факт.
Только если пользователь сам её запустит залогинившись локально..

!Viper!
Можно через WMI
Win32_LogonSession
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 14.03.2006 (Вт) 15:29

Sebas писал(а):Можно через WMI
Win32_LogonSession


Боюсь ошибиться, но вроде как это тоже получается имя локального пользователя компа с которого запускается код... Но насчет WMI направление правильное, буду копать...
Весь мир матрица, а мы в нем потоки байтов!

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 14.03.2006 (Вт) 16:18

Ошибаешься...
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

ZlydenGL
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 148
Зарегистрирован: 13.08.2004 (Пт) 10:02

Сообщение ZlydenGL » 14.03.2006 (Вт) 17:08

А функция
Код: Выделить всё
Private Declare Function GetUserName& Lib "advapi32.dll" Alias "GetUserNameA"

Не катит?
Покой нам только снится!!! И то редко. Поскольку нет в мире совершенства, а есть только стремление к оному.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 14.03.2006 (Вт) 17:17

А ты её описание читал или только название?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

ZlydenGL
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 148
Зарегистрирован: 13.08.2004 (Пт) 10:02

Сообщение ZlydenGL » 15.03.2006 (Ср) 10:52

Дык... Вот описалово:
msdn.microsoft.com писал(а):The GetUserName function retrieves the name of the user associated with the current thread.


Оригинал статьи тут. Разве не то, что надо? Во всяком случае я именно этой функцией пользуюсь для определения активного пользователя :)

А. Упс, извините, дошло. Нужно пользователя сетевой машины узнать, а не локальной...
Покой нам только снится!!! И то редко. Поскольку нет в мире совершенства, а есть только стремление к оному.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 15.03.2006 (Ср) 11:50

2 Sebasа как поиспользовать Win32_LogonSession с целью узнать имя пользователя на сетевой машине? То бишь примерчиком кинь, а то я с WMI не в лучших отношениях... :D
Весь мир матрица, а мы в нем потоки байтов!

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 15.03.2006 (Ср) 15:40

http://msdn.microsoft.com/library/defau ... frame=true

Инфа по классам.

А как кодить WMI + google тебе в помощь
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 20.03.2006 (Пн) 15:37

я в печали... Win32_LogonSession требует Windows XP, а задача должна выполнятся на Windows 2000.

Посему вопрос всплывет заново...

Как выяснить имя пользователя работающего за сетевой машиной в данный момент времени без использованися средств WMI?
Весь мир матрица, а мы в нем потоки байтов!

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 20.03.2006 (Пн) 16:22

откуда деза?

The Win32_LogonSession WMI class describes the logon session or sessions associated with a user logged on to Windows NT or Windows 2000.
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

Igor_coder
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 17.03.2006 (Пт) 14:54

Сообщение Igor_coder » 20.03.2006 (Пн) 16:23

попробуй так:

function WNetGetUser(lpName: PChar; lpUserName: PChar; var lpnLength: DWORD): DWORD;

Функция возращает текущее имя пользователя или пользователя установившего соединение

функция находиться в файле
mpr.dll

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 20.03.2006 (Пн) 16:28

...нет слов... Ну не хотят люди название темы читать.... 2 Igor coder то что ты предлагаешь даст имя локального пользователя на компе вызвавшем функцию
Весь мир матрица, а мы в нем потоки байтов!

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 20.03.2006 (Пн) 16:32

Sebas писал(а):откуда деза?

The Win32_LogonSession WMI class describes the logon session or sessions associated with a user logged on to Windows NT or Windows 2000.


забавно то что при необходимость Windows 2000 упоминается в MSDN идущем с VS 2005, более ранние версии указывают на необходимость Windows NT 4.0 SP4....

странно...
Весь мир матрица, а мы в нем потоки байтов!

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 20.03.2006 (Пн) 17:35

!Viper! писал(а):
Sebas писал(а):откуда деза?

The Win32_LogonSession WMI class describes the logon session or sessions associated with a user logged on to Windows NT or Windows 2000.


забавно то что при необходимость Windows 2000 упоминается в MSDN идущем с VS 2005, более ранние версии указывают на необходимость Windows NT 4.0 SP4....

странно...


Ну, наверное тогда ещё не было WIn2000)))))))))))))))))
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 20.03.2006 (Пн) 17:37

ZlydenGL писал(а):А. Упс, извините, дошло. Нужно пользователя сетевой машины узнать, а не локальной...


А на сетевой машине может быть одновременно открыто несколько пользовательских профилей...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Eduard
Бывалый
Бывалый
 
Сообщения: 254
Зарегистрирован: 31.08.2003 (Вс) 17:12
Откуда: Эстония

Сообщение Eduard » 20.03.2006 (Пн) 20:29

Andrey Fedorov писал(а):
ZlydenGL писал(а):А. Упс, извините, дошло. Нужно пользователя сетевой машины узнать, а не локальной...


А на сетевой машине может быть одновременно открыто несколько пользовательских профилей...

тогда всех перечислить, м выделить активного :lol: :lol:
On Fatal Error Resume Next

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 21.03.2006 (Вт) 9:12

Eduard писал(а):тогда всех перечислить, м выделить активного


именно это то и является проблемой. Как их перечислить я знаю (смотреть первый топик). А вот кто из них активный то? и есть ли он вообще?
Весь мир матрица, а мы в нем потоки байтов!

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Re: Получение имя пользователя, работающего на заданном комп

Сообщение Ennor » 21.03.2006 (Вт) 17:22

!Viper! писал(а):З.Ы. Работает же как то команда nbtstat -a?
Признаться, не понял, что ты имел этим в виду. Долго думал, но никакой аналогии с сабжем не нашел...

И еще я не понял, что ты имел в виду под термином "активный" - на серваке может одновременно висеть несколько активных терминальных сессий, у каждой из которых свой владелец. И они все работают. При этом на консоль никто не залогинен. И кто же из них работает "настоящее" остальных?

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 21.03.2006 (Вт) 17:50

Под "активным" подразумевается интерактивный.
Lasciate ogni speranza, voi ch'entrate.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 22.03.2006 (Ср) 8:43

Под активным пользователем я подразумеваю пользователя сидящего перед рабочей станцией в данный момент времени. Те кто досучались до компа путем терминальных сессий или как то еще, то есть интерактивные пользователи меня не интересуют
Весь мир матрица, а мы в нем потоки байтов!

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 22.03.2006 (Ср) 12:34

10 минут поиска, чесслово. Полагаю, что в особенности тебя заинтересует WTSGetActiveConsoleSessionId.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 22.03.2006 (Ср) 17:35

Во-первых все функции WTS... требуют как минимум Windows XP, а надо тобы все работало на Windows 2000. Ну и во вторых эта функция возвращает ID терминальной сессии, что совершенно не то что мне нужно
Весь мир матрица, а мы в нем потоки байтов!

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 22.03.2006 (Ср) 23:24

Конкретно функция, указанная мной в предыдущем посте - да, требует ХР/2003. Но вот этим вполне достаточно винтукея (а некоторым из них даже NT4 Server SP4):

WTSOpenServer()
WTSEnumerateSessions()
WTSQuerySessionInformation()

Согласен, функции выглядят довольно громоздко, но у тебя и задачка, как бы это сказать... не каждый день такое встречается; да и явно я не для себя пишешь.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 23.03.2006 (Чт) 17:39

Сеньк, буду поглядеть... может наконец то оно!
Весь мир матрица, а мы в нем потоки байтов!

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 29.03.2006 (Ср) 12:41

интересные результаты при получении через WMI

В списке получаются все пользователи, которые логинились локально, с момента загрузки и все со статусом ОК.

Вероятно,последний... хотя он может быть в лог оффе(((
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 29.03.2006 (Ср) 16:17

2 Sebas... именно это же получается и при использовании NetWkstaUserEnum... с чего и начался данный топик
Весь мир матрица, а мы в нем потоки байтов!

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 29.03.2006 (Ср) 17:15

!Viper! писал(а):2 Sebas... именно это же получается и при использовании NetWkstaUserEnum... с чего и начался данный топик


Ну как я понял из первого сообщения АПИ возвращает все виды логонов, WMI возвращает только тех кто сидит за компом, но не факт что они ..... не ушли)))))))))))))
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

След.

Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 64

    TopList