BgInfo для 1С 7.7

Класс для получения параметров сессии (включая данные терминального сервера и клиентской машины) и их вывода фоном в окне 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. Его тоже не всегда можно получить.

11 Comments

  1. 11k65m

    Какую инфу можно получить если есть сервер под thinstation грузится 50-55 человек. У всех одну и туже или каждой машины отдельно?

    Reply
  2. sournk

    Для получения имени терминального клиента используется:

    Set WSHShell     = CreateObject(«WScript.Shell»)
    Set WshSysEnv     = WshShell.Environment(«Process»)
    GetTheParametr    = WshSysEnv(«Clientname»)
    

    Для Microsoft Terminal Services отрабатывает нормально, что будет под ThinStation не знаю, не тестил. Нет его в нашей инфраструктуре.

    Reply
  3. Ёпрст

    А зачем пинг в командаСистемы ?

    проще whs + run… нет окошка мигающего.

    Reply
  4. sournk

    Мигающее окошко уберу. Думал сразу как-нить сделать определение локального IP пингом в отдельном потоке, или на крайний случай во время простоя выполнять, а то еще долго делается.

    Reply
  5. Ёпрст

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

    или что другое ?

    Reply
  6. sournk

    В поделки использую GFLAX для создания bmp с нужным текстом, который устанавливается фоном через Сервис.УстановитьОбои().

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

    Про мигающее окошко через Команду системы догадался?

    Reply
  7. Ёпрст

    (6) у тебя в описании к поделке прямым текстом :))

    Reply
  8. Ёпрст
    Ping выполняется просто КомандойСистемы, мигая консольным окном.
    Reply
  9. CheBurator

    Если подключился к терминалке на одном рабочем месте, потом сессию РАЗЪЕДИНИЛ, но сессия осталась незакрытой и потом подконнектился к ней с другого клиентского места — какой клиентнейм будет фигурировать?

    Reply
  10. sournk

    Зависит от того куда в конфе встроен п.2 из раздела «Пример использования». Естественно если один раз при старте системы вызывать .Выполнить(), то при подключении к имеющейся rdp-сессии с другого клиента вы увидите старую инфу.

    Reply
  11. zarius

    Как и было сказано в (3), для устранения недостатка №3 достаточно заменить:

    КомандаСистемы(Шаблон(«ping [аИмя] -n 1 > «»[сВрФайл]»»»));
    

    на

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

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *