gifts2017

Всем выйти из сумрака - отображение скрытого окна процесса 1C, запущенного через OLE

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

Наверняка те, кто сталкивался с программированием подключений к 1С через OLE, попадали в ситуацию, когда OLE-шный процесс ведет себя "не так, как надо". Например, подключиться к базе удается, а ожидаемых данных нет. Или процесс должен был бы завершиться, а он почему-то висит в списке задач. Эта разработка предназначена для того, чтобы подсмотреть, что же творится в окне непокорной программы.

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

Суть алгоритма очень проста: получаем список всех окон, сравниваем заголовок очередого окна с шаблоном, и если это окно невидимо - отображаем его. 

 

Примечание:

В текущей реализации годится не для всех случаев! Например, при ручном запуске базы 7.7 с не той кодовой страницей, окно с сообщением об отличии порядка сортировки появляется и имеет заголовок "1С:Предприятие", но при попытке подключиться к этой же базе по OLE окно с таким заголовком отсутствует напрочь. Анализ окон по Process ID такого 1С OLE подключения показал следующее: всего 4 окна, CLASS и ТЕХТ - у всех окон пустые, у одного Title=DDE Server Window, у другого Title=Default IME   и все...  Может кто подскажет как выкрутиться в таких случаях?

 

Использование:

show_window.exe [шаблон поиска] - По умолчанию шаблон поиска заголовка окна это "1С:Предприятие" и никаких параметров запуска указывать не надо. Есть возможность задать свой шаблон поиска в командной строке через параметры запуска. По сути передаваемый параметр(ы) - это строка (для знакомых с темой регулярных выражений: RegExp в реализации AutoIt, аналогичной VBScript.RegExp, для тех кто не знает что это такое - это не важно!).  Если шаблон поиска указан, то все пробелы между названием программы и шаблоном воспринимаются как один пробел. Все пробелы внутри шаблона остаются неизменными. В случае применения пробелов внутри шаблона заключать шаблон в кавычки нет необходимости.

 

Исходный код к программе прилагается. Мог бы написать этот костыль на Delphi, VBScript / JScript, в виде обработки 1С с использованием ВК Formex, но лично для меня в AutoIt это было сделать быстрее и проще.

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

Наименование Файл Версия Размер Кол. Скачив.
show_window
.zip 389,03Kb
10.04.11
123
.zip 389,03Kb 123 Бесплатно

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Епрст (Ёпрст) 11.04.11 13:13
3. kittystark kittystark (kittystark) 11.04.11 14:52
(1),(2)блин, кто-ж знал...
честно искал через яндекс - не нашел
решил написать на скорую руку, хотя и терзали смутные сомненья, что неужели никто этого еще не написал

как говорится, и где ты был раньше ?
4. Епрст (Ёпрст) 11.04.11 15:00
(3) никто не спрашивал..
,а так, велосипеды изобретать не зазорно..
5. Олег Шалимов (CaSH_2004) 17.04.11 01:28
Насколько я понял мы тут говорим про процессы... я всегда их отлавливал и рубил через TotalCommander, лучшего помошника программисту я еще не видел
так что советую пользоваться
6. kittystark kittystark (kittystark) 17.04.11 12:38
(5) тоталом не пользуюсь, предпочитаю FAR, поэтому вопрос, так, ради общего развития: а что, тотал позволяет ОТОБРАЗИТЬ окно скрытого процесса ?

а в плане рубануть, так под W2008Srv стандартного Ctrl+Shift+Esc (task manager) - мне пока более чем достаточно (список колонок только поднастроить 1 раз), для массового рубилова изредка пользуюсь стандартным же taskkill, хотя, изначально речь шла вроде не об этом...
7. Олег Шалимов (CaSH_2004) 17.04.11 15:27
Насчет скрытых точно не могу ответить на вопрос, за несколько лет много раз делал обмены и не раз повисало соеденение, всегда выручал Тотал
пользуюсь Task manager и иногда AceHelper
Что то не встречал особо скрытых процессов, хотя знаю что такие есть, но я не проверял скрытые они или нет т.к. все что мешает вижу в тотале и просто убиваю их, не спрашивая скрытые они или нет :)
насчет удобства предпочитаю Тотал - позволяет фильтровать список процессов по быстрому набору с клавиатуры, и к тому же он оказывает пиктограммы, что тоже ускоряет поиск. Хотя виндовские средства надежнее но мне только несколько раз встречались случаи когда тотал не мог а виндовс мог убить процесс. Если есть такая информация то прояни момент - разве тотал не может видеть скрытые?
8. EugenVitla (EugenVitla) 29.08.11 11:05
(7) Снести процесс каждый может. Хотя б даже и диспетчером, по колонке ID. Особенно прелестно потом минут 10 загорать, пока DBF переиндексируется. А вот понять, какого черта оно вешается - тут снесение не поможет.
9. Олег Шалимов (CaSH_2004) 29.08.11 11:55
(8)Ну я не индексирую т.к. программу завершил сам и знаю что это не ошибка системы, несколько лет так делаю никаких проблем не встречал. В свободной ночью ставлю на полное тестирование+востановление и все.
Любопытно, а как ты определяеш из-за чего зависла программа? Я могу это определить только если сам допустил ошибку в коде, а чужую ошибку можно только путем эксперементов выявить
10. EugenVitla (EugenVitla) 29.08.11 12:05
(9) Если 1С сворачивается в коврик и болтается, так хоть понятно, что утечка памяти где-то.
Плюс у меня база, в которой разработку веду, отладочные сообщения высыпает палюбасу. И при подключении по OLE я их не вижу.
Все руки не доходят это дело в файл лога писать - сделано было еще до классов, много где переписывать нужно.

ЗЫ. ТиИ на моей машинке (Core 6320) занимает около двух суток ;-)
11. nic kure (nkure) 30.09.11 09:58
12. EugenVitla (EugenVitla) 04.10.11 01:47
(11) nkure, W2k3 R2 x86/х64 - полет нормальный.
дело явно не в бобине.
13. Ильдус Гаясович (ildus78) 29.06.12 15:07
это же самое можно сделать с помошью FAR плагин DoHide
14. Андрей Саввов (mars30ob) 15.07.13 18:18
На W2k3 srv R2 x86 выдает:
Файл изображения D:\show_window.exe не поврежден, но предназначен для другого типа компьютера.

Это как понимать?
15. Александр Милютин (sanfoto) 28.07.15 10:47
(6) kittystark,
ответ пардон запоздал)))
на ...
а что, тотал позволяет ОТОБРАЗИТЬ окно скрытого процесса ?

да как правило позволяет.. через ТаскМэнеджер открываем сво-ва процесса и ищем опцию типа Visible - выставляем в True
(В данном случае это вероятней всего элемент с классом "V8TopLevelFrame")
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа