2009-06-10 5 views
0

Мой работодатель приобрел сторонний инструмент OfficeConverter от Conveter Technology, который автоматизирует преобразование/восстановление файлов формата Office 2003 в формат Office 2007. Этот инструмент также сильно автоматизирует перевод/изменение требований к кодам макро/VBA между форматами Office 2003 и 2007.Как отправить клики или ключи из приложения VB6 в диалоговое окно Excel?

Моя проблема заключается в том, что во время этого преобразования инструмент открывает целевой продукт Office, скажем, Excel и затем открывает целевой файл пользователя (то есть Report.xls), а затем изучает любой код VBA/макроса для требований к изменениям. Проблема заключается в том, что ЕСЛИ код файла Excel зависит от какого-либо внешнего инструмента, такого как .OCX-файл, и если этот инструмент не существует на ПК, на котором я выполняю это действие, Excel выведет сообщение о том, что объект имеет не было найдено, останавливая весь процесс преобразования (тысячи файлов подряд), пока кто-то не появится, и MANUALLY нажимает соответствующую кнопку, чтобы закрыть диалоговое окно.

Я решил, что создание небольшого приложения для наблюдения в VB6 (эй, я состарился и мои навыки тоже) может сидеть на одном ПК и следить за этими диалоговыми окнами, и, в зависимости от конкретного сообщения, нажмите соответствующую с помощью вызова API SendMessage.

Проблема заключается в том, что я не смог получить SendMessage для того, чтобы на самом деле нажать кнопку для меня, я попытался отправить ему значение ключа возврата (vbKeyReturn) или даже клавишу пробела (vbKeySpace), но действие никогда приводит к закрытию диалогового окна, как должно. Я могу настроить фокус на вкладку между кнопками, включенными в диалоговое окно, но об этом.

Я попытался использовать SendKeys, но это гораздо менее надежное и сильно обескураженное в текущей документации, с которой я столкнулся.

Любые предложения? :)

+0

Вы пытались отправить Escape? – stuartd

ответ

4

Если у вас есть кнопка hWnd для кнопки, и машина не работает, вы можете легко использовать MouseEvent, чтобы переместить курсор над кнопкой и щелкнуть по ней. Этот пример включает в себя падение в готовый модуль, который будет делать грязную работу за вас дается только дескриптор окна:

http://vb.mvps.org/samples/MouseEvent

В противном случае, самый простой способ, вероятно, просто отправить WM_LBUTTONDOWN и WM_LBUTTONUP последовательно.

EDIT: Если вы просто хотите это сделать, возьмите совет Джима и попробуйте инструмент Window Demon от Gary Chanson.

+0

Добро пожаловать в переполнение стека! – MarkJ

+0

Спасибо, Марк. Хорошая концепция здесь. –

+0

Карл, я прочитал ваши статьи в VBPJ для ЛЕТ, и теперь вы отвечаете на мой вопрос ... Мне так повезло! Я собираюсь дать ваше предложение попробовать. Спасибо, что поделились этим! –

2

Посмотрите на this utility «Window Demon» Гэри Шансон

Карл: как быстро мы забываем наши приятели!

+0

Да, у Гэри есть действительно классные инструменты. Моя проблема в том, что я редко искал существующее решение, когда мне так интересно создавать его. По крайней мере, для таких вещей. Ты прав. Это идеальное решение для этой проблемы! –

+0

Ссылка на .zip-файл в статье мертва. Я отправил сообщение контакту исходного сайта, чтобы узнать, существует ли продукт. По-видимому, он был удален из бета-области на сайте. –

1

Предлагаю взглянуть на AutoIt.

Это идеальное решение для этой задачи, ищите окно с определенным текстом на нем и нажмите кнопку. Выполняется в системном трее как отдельное приложение.

+0

Прохладный! Спасибо, Бен! У меня нет этого ... Я попробую. –

 Смежные вопросы

  • Нет связанных вопросов^_^