Причины описанного поведения "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 это было сделать быстрее и проще.