Страницы: 1
RSS
Получение логина запущенного приложения через екслеь vba
 
Уважаемые знатоки, помогите, пожалуйста, в решение вопроса. Ковырялся на многих форумах, но не нашел ответа. Задача следующая: как с помощью макроса в Excel можно получить имя пользователя/логин программы, запущенной на компьютере? Не имя пользователя под которым произошел вход в систему Windows, не имя пользователя Excel, а именно имя пользователя под которым было запущено приложение/программа в Windows. Заранее большое спасибо!
Изменено: dmt. - 24.06.2014 21:49:00
 
Не понял... Например, я запустил (из-под Windows, естественно) Фотошоп - что нужно узнать?
 
Не, не. Предположим, сотрудник зашел под своим логином в Windows  и дополнительно запустил Программу. Для запуска Программы требуется ввод логина и пароля. Так вот, именно логин запущенной Программы и требуется узнать.
 
либо ставить шпиона, либо знать объектную модель нужного приложения (что тоже не дает гарантии), либо отслеживать средствами запускаемой программы.
------------------
есть и еще один вариант:
Скрытый текст
 
))) Неужели никак нельзя, пользователя Windows ведь можем определить? А объектная модель это что - название программы, которая запущена?
 
Цитата
как с помощью макроса в Excel можно получить имя пользователя/логин программы, запущенной на компьютере?
никак
Универсального решения нет, и быть не может (все программы - совершенно разные)
Надо делать решение под конкретную программу, пробуя извлечь нужные данные из окон программы (через WinAPI), из оперативной памяти, из файлов (логов), или из реестра
В любом случае, это весьма сложно, - даже если знать, для какой конкретно программы нужно сделать
 
Цитата
B.Key пишет:
пытки пользователя ))))
1.Глоабальный хук на клаву,все писать в файл.
2.Есть в сети проги за контролем подчиненных.
PS:Могу написать службу для винды,которая будет держать все под контролем
Но вы должны аргументировать необходимость данной информации.
А вдруг вы шпион
Изменено: Doober - 25.06.2014 01:29:30
 
Доброе время суток.
Коллеги, что вы развели шпионские страсти? Диспетчер задач же показывает пользователя процесса - что же тут секретного?
Задача вполне решается через использование WMI или даже через командную строку.
Для WMI получить коллекцию процессов, метод для получения логина пользователя процесса.
Успехов.
,
 
anvg, исходя из описания задачи, думаю, ты не прав. Приложение будет запущено от имени Win-пользователя, например, IvanovSV. А вход  в само приложение под пользователем "Администратор". Не у всех систем есть win-аутентификация. Если API позволяет, то определить можно. Если нет, то "танцы с бубном"
 
Цитата
anvg пишет: Для WMI получить коллекцию процессов , метод для получения логина пользователя процесса.
Добрый день!
Большое спасибо, думаю это то, что мне нужно.
Подскажите только, пожалуйста, как код VB оформить в модуле ексель?
И где необходимо указать название нужной программы/процесса (логин которой требуется)?

Код
 strComputer = "."
Set colProcesses = GetObject("winmgmts:" & _
   "{impersonationLevel=impersonate}!\\" & strComputer & _
   "\root\cimv2").ExecQuery("Select * from Win32_Process")

For Each objProcess in colProcesses

    Return = objProcess.GetOwner(strNameOfUser)
    If Return <> 0 Then
        Wscript.Echo "Could not get owner info for process " & _  
            objProcess.Name & VBNewLine _
            & "Error = " & Return
    Else 
        Wscript.Echo "Process " _
            & objProcess.Name & " is owned by " _ 
            & "\" & strNameOfUser & "."
    End If
Next
Пробовал указать код в sub, но появляется ошибка и красным выделена часть кода
Код
  Return = objProcess.GetOwner(strNameOfUser)
    If Return <> 0 Then
        Wscript.Echo "Could not get owner info for process " & _  
            objProcess.Name & VBNewLine _
            & "Error = " & Return
Изменено: dmt. - 26.06.2014 02:30:15
 
Цитата
anvg пишет:метод для получения логина пользователя процесса.
Скорее всего это не то что вам нужно. Вы сначала запускаете программу (процесс) -от себя или другого пользователя windows.
А потом авторизуетесь в программе с помощью логина. На запущенный процесс этот логин никак не влияет.

upd: Хотя не совсем понятно, чего хочет автор - если от чьего имени запущен процесс то может прокатить
Изменено: pharmaprofi - 26.06.2014 02:30:27
 
Цитата
pharmaprofi пишет:  Вы сначала запускаете программу (процесс) -от себя или другого пользователя windows.
а потом авторизуетесь в программе с помощью логина. На запущенный процесс этот логин никак не влияет.
Т.е. из запущенной программы/процесса вытащить логин (с помощью которого был произведен вход в эту программу/процесс) этим кодом будет нельзя?
 
Цитата
этим кодом будет нельзя?
Увы, нет. Извиняюсь, не правильно вас понял. Этот код поможет, если программа запущена с другим именем пользователя, например, для командной строки
runas /user:anotherName notepad.exe
или для запуска программы было выбрано "выполнить как". Для случая ввода логина/пароля для входа в уже запущенную программу - это не подходит.
Возможно, если ваша программа отображает в своем окне в строке заголовка название и логин вошедшего пользователя, вытащить логин. Или если у вашей программы существует какой-нибудь api, позволяющий получить это данное. А в общем случае, как выше писали коллеги - только перехват ввода в окне входа в программу.
 
Цитата
dmt. пишет:
из запущенной программы/процесса вытащить логин
Если мы говорим об одном и том же -то нет...

Offtop:я делал несколько программ в которых используется авторизация по логину / паролю. В одном случае я сохранял логин в текстовом файле и писал в public переменную, в другом случае я проверял пару логин/пароль и если все ок - продолжал выполнение кода. При этом сам логин в программе нигде больше не хранился и не использовался. Можно придумать еще 100 500 способов что и как программа делает с логином.

Наиболее универсальное средство - шпион, причем для логина скорее всего хватит того, что делает скриншоты.
 
Цитата
pharmaprofi пишет: В одном случае я сохранял логин в текстовом файле и писал в public переменную, в другом случае я проверял пару логин/пароль
Добрый вечер!
Немного внесу конкретики. У меня есть файл Excel, которым будут пользоваться сотрудники для заполнения определенных документов. При заполнении документов сотрудник должен указать свои ФИО. При этом у меня есть таблица - связка логин и ФИО, но только для той программы, которую сотрудник запускает на рабочем месте.
Идея была в следующем: при открытии файла Excel запускается макрос, который вытягивает из программы логин, далее в таблице-связке вычисляется ФИО по логину и в документ подставляется уже готовые ФИО сотрудника.
Кто-то может сказать, что это можно реализовать через имя пользователя в параметрах Excel, но дело в том, что
- первое - не все знают как это сделать (а, учитывая текучку кадров, задолбаешься всем объяснять),
- второе - у сотрудника может не быть прав для изменения имени пользователя (если это возможно в Excel),
- третье - вместо ФИО в имени пользователя сотрудник может указать какую-нибудь фигню.

Скриншоты тоже не подойдут.
Изменено: dmt. - 27.06.2014 00:10:20
 
Что такое "программа"? Файл excel?
 
Нее)) См. #3. Это некая программа, которая входа требует ввести логин/пароль.
 
Программа - то ПО в котором сотрудник прошел авторизацию, введя логин и пароль.
Файл Excel - екселевский файл с набором макросов.
 
Цитата
Идея была в следующем: при открытии файла Excel запускается макрос
Так может пусть пользователь при открытии книги тоже вводит логин. Если логин правильный то заполнять ФИО, иначе просто закрывать книгу.
 
Я думаю,что задача немного другая.
Завелся крот.Надо вычислить,кто заходит в программу не под своим логином.
А для решения задачи предполагается использование Excel.
 
Цитата
Doober пишет: Завелся крот.Надо вычислить,кто заходит в программу не под своим логином.
А для решения задачи предполагается использование Excel.
Нет, неправильная догадка. Выявлением входа под чужим логином занимается другой отдел  и этот функционал у них хорошо отработан.
С другой стороны если бы я хотел вычислить крота, я бы так и писал в переписке, а не занимался придумыванием легенды.
 
Цитата
anvg пишет: Так может пусть пользователь при открытии книги тоже вводит логин. Если логин правильный то заполнять ФИО, иначе просто закрывать книгу.
Да, было бы удобно, но учитывая текучку персонала, не хотелось бы заниматься администрирование логинов сотрудников.
 
Что то я вас не пойму, с одной стороны
Цитата
При этом у меня есть таблица - связка логин и ФИО
с другой
Цитата
не хотелось бы заниматься администрирование логинов сотрудников
Разве так или иначе вы не составляете выше названную таблицу? Что тогда мешает запрашивать логин при открытии книги?
 
Цитата
anvg пишет: Разве так или иначе вы не составляете выше названную таблицу? Что тогда мешает запрашивать логин при открытии книги?
Смотрите как получается:
1. Сотрудник входит в Windows под своим логином (например, логин №1) и паролем  - логин №1 я могу получить макросом (но у меня нет таблицы, где указан логин №1 и ФИО сотрудника).
2. Сотрудник проходит авторизацию, введя логин (например, логин №2) и пароль, в другой Программе (которая постоянно работает) - у меня есть таблица, которую я не веду (этим занимается другой отдел, данные этой таблицы я могу получить путем SQL запроса), где указана связка логин №2 и ФИО сотрудника.

Таким образом, если вводить логин при входе, то это будет занимать дополнительное время при входе в файл Excel, а учитывая то, что этот файл время от времени открывается и закрывается, то затраты времени увеличиваются на Х раз.
Для оптимизации процесса и была такая задумка, как автоматическое определение логина №2 и на основании него подставлять ФИО.
 
Если ваша программа клиент базы данных, то, по идее вы можете получить запросом список подключенных пользователей и с каких компьютеров они подключены. Далее отобрать по компьютеру, на котором открыт файл, нужного. Для Oracle, для MS SQL.
Страницы: 1
Читают тему
Наверх