gifts2017

BgInfo для 1С 7.7

Опубликовал sournk (sournk) в раздел Администрирование - Системное

Класс для получения параметров сессии (включая данные терминального сервера и клиентской машины) и их вывода фоном в окне 1С.

Общая информация

Есть такая замечательная утилита BgInfo от TechNet (http://technet.microsoft.com/en-us/sysinternals/bb897557.aspx), которая позволяет поверх обоев рабочего стола вывести информацию о ПК, сеансе пользователя и т.д. 

Нечто подобное, в гораздо упрощенном варианте, позволяет сделать этот 1С++ класс. Выводит фоном в главном окне 1С параметры сессии, которые состоят из:

  1. Названия 1С. Выводить ЗаголовокСистемы().
  2. Имя пользователя в 1С.
  3. Системное имя пользователя. 
  4. Имя сервера,  если 1С запущена в терминальной сессии. 
  5. IP адрес сервера, если 1С запущена в терминальной сессии. 
  6. Имя локального компьютера. Даже если 1С запущена в терминальной сессии будет получена имя клиента RDP.
  7. IP адрес локального компьютера. По полученному имени пытаемя определить IP адрес клиента через парсинг вывода ping-а.
 

Пример использования

 Для работы необходимо:

  1. Подключить класс.
  2. Чтобы вывести информацию в главное окно 1С:
    oBGInfo = СоздатьОбъект("BgInfo"); oBGInfo.Выполнить("Ваши учетные:");  
  3. Не забудьте зарегистрировать ActiveX компоненту.

Недостатки

  1. Надо понимать, что данные клиентской машины, в случае подключения к терминальному серверу не всегда можно получить, т.к. это зависит от типов клиентов.
  2. IP адрес клиентской машины получается путем простого парсинга ответа на ping. Его тоже не всегда можно получить.

Скачать файлы

Наименование Файл Версия Размер
Класс BgInfo 4
.ert 64,50Kb
08.09.14
4
.ert 64,50Kb Скачать
ActiveX GflAx 2
.dll 1,11Mb
30.04.13
2
.dll 1,11Mb Скачать

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Костя (11k65m) 30.04.13 22:03
Какую инфу можно получить если есть сервер под thinstation грузится 50-55 человек. У всех одну и туже или каждой машины отдельно?
2. sournk (sournk) 01.05.13 09:03
Для получения имени терминального клиента используется:
      
  Set WSHShell     = CreateObject("WScript.Shell")
  Set WshSysEnv     = WshShell.Environment("Process")
  GetTheParametr    = WshSysEnv("Clientname")
...Показать Скрыть


Для Microsoft Terminal Services отрабатывает нормально, что будет под ThinStation не знаю, не тестил. Нет его в нашей инфраструктуре.
3. Епрст (Ёпрст) 14.08.13 09:17
А зачем пинг в командаСистемы ?
проще whs + run... нет окошка мигающего.
4. sournk (sournk) 14.08.13 09:49
Мигающее окошко уберу. Думал сразу как-нить сделать определение локального IP пингом в отдельном потоке, или на крайний случай во время простоя выполнять, а то еще долго делается.
5. Епрст (Ёпрст) 14.08.13 09:51
Поделку не качал, активикс.. это который от bgInfo ?
или что другое ?
6. sournk (sournk) 14.08.13 10:05
В поделки использую GFLAX для создания bmp с нужным текстом, который устанавливается фоном через Сервис.УстановитьОбои().

Поделку не качал, активикс.. это который от bgInfo ?

Про мигающее окошко через Команду системы догадался?
7. Епрст (Ёпрст) 14.08.13 10:22
(6) у тебя в описании к поделке прямым текстом :))
8. Епрст (Ёпрст) 14.08.13 10:23
Ping выполняется просто КомандойСистемы, мигая консольным окном.
9. Сергей (Che) Коцюра (CheBurator) 14.08.13 11:09
Если подключился к терминалке на одном рабочем месте, потом сессию РАЗЪЕДИНИЛ, но сессия осталась незакрытой и потом подконнектился к ней с другого клиентского места - какой клиентнейм будет фигурировать?
10. sournk (sournk) 14.08.13 13:18
Зависит от того куда в конфе встроен п.2 из раздела "Пример использования". Естественно если один раз при старте системы вызывать .Выполнить(), то при подключении к имеющейся rdp-сессии с другого клиента вы увидите старую инфу.
11. Alexey (zarius) 17.07.14 15:10
Как и было сказано в (3), для устранения недостатка №3 достаточно заменить:
	КомандаСистемы(Шаблон("ping [аИмя] -n 1 > ""[сВрФайл]"""));

на
	
	Шелл = СоздатьОбъект("WScript.Shell");    
	Шелл.Run("cmd.exe /c ""ping " + аИмя + " -n 1 > """ + сВрФайл + """""",0,1);