|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
Результаты опроса: степень возможности VB для этой задачи | |||
невозможно | 1 | 25.00% | |
сложно | 3 | 75.00% | |
пустяки | 0 | 0% | |
я готов помочь | 0 | 0% | |
Голосовавшие: 4. Вы ещё не голосовали в этом опросе |
|
|
Опции темы | Поиск в этой теме |
19.02.2009, 20:04 | #1 |
Регистрация: 19.02.2009
Сообщений: 8
|
Возможно ли написать в VB/VBA(Ex) софтину, которая бы управляла программой (или usb устройством)
Есть программа, написанная в 97 году на Microsoft Visual Basic 5.0 / 6.0 (PEiD). Писал не я - исходников нет, поэтому весь сыр-бор:
(см.скриншот) Она при нажатии Start создаёт новую книгу excel (в НОВОМ процессе) и передаёт данные он-лайн через USB с девайса (измерительный инструмент) в эту книгу (описание девайса есть. как формируется "битовая строка" для передачи там описано) Я хочу(=надо) сделать программу (VB или VBA в Excel) для удобства анализа данных. Пробывал VBA Excel'я - не получается "достучатся" до процесса EXCEL, "созданного" прогой. Мой макрос видит только книги, открытые/созданные в текущем процессе Excel типа того: Код:
1.запуск ExRcv.exe 2.выбор CEM (combobox) 3.выбор LF (optionbutton) - НЕ ОБЯЗАТЕЛЬНО! 4.нажатие Start 5.мониторинг открывшейся книги(листа) Excel'я на предмет обновления данных. |
20.02.2009, 05:35 | #2 | ||
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,856
|
Цитата:
1) запустить exe-файл проблем не составит (одна строка кода) 2 - 4) нажатие кнопок и выбор элементов управления - тоже несложная задача (правильнее, конечно, посылать сообщения элементам управления, но можно и по-другому, если программа ExRcv.exe будет запускаться только на одном компе с постоянным разрешением экрана: ставим курсор на нужные координаты экрана, зная, что в этой точке экрана расположена кнопка, и посылаем нажатие клавиши) 5) мониторинг при желании также реализуем. Можно попробовать несколько вариантов (в зависимости от кого, как в программе реализован вызов Excel) Цитата:
Вы перебираете все открытые рабочие книги в текущей копии приложения Excel, а тот файл открыт в другом процессе. Другое дело, если Вы откроете свой файл с макросами через интерфейс той, запущенной процессом, копии Excel - тогда всё будет работать. |
||
21.02.2009, 10:09 | #3 |
Балуюсь кодами
Участник клуба
Регистрация: 09.01.2009
Сообщений: 1,837
|
Здесь человек серьезно занялся этим вопросом с применением WinAPI. Свяжись с ним, думаю вместе вы чего-нибудь придумаете. И, насколько я понял, делает это он в VBA.
А может это ты и есть? Хотя вряд ли, тот уже много чего раскопал.
Лучше день потерять — потом за пять минут долететь!©
|
22.02.2009, 05:29 | #4 | ||
Регистрация: 19.02.2009
Сообщений: 8
|
EducatedFool, viter.alex - спасибо за ответы.
Цитата:
Цитата:
Пробовал использовать личную книгу макросов что грузится автоматом с Е. - нифига. Ексель чистеньким запускается. Другой вопрос: (из руководстве к девайсу) ЮСБ драйвер установлен. прога НАИПРОСТЕЙШАЯ. при нажатии кнопки на приборе, он передаёт строку (см. картинку). Может проще написать программу "заново". |
||
22.02.2009, 10:56 | #5 | |
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,856
|
Вы бы хоть написали, про какое устройство идёт речь.
Я так понял, что речь идёт про этот девайс: Цитата:
Но отлаживать программу, не имея при себе этого девайса, - задача не из лёгких... Покупать такой девайс ради написания программы - тоже не лучший выход. Так что, если надумаете делать новую программу, основная часть работы ляжет на Вас, как на владельца устройства. На мой взгляд, проще написать программу, которая будет отслеживать все запущенные приложения Excel, и при обнаружении нового процесса каким-либо образом "внедряться" в него. В данном случае всё просто - достаточно активировать окно приложения Excel, и послать ему десяток нажатий клавиш (при помощи горячих клавиш через меню приложения вызвать открытие определённого файла с макросами - примерно так, как мы нажимаем Файл - Открыть...). А дальше всё сделают макросы - так как они будут запущены как раз из нужной копии Excel. |
|
22.02.2009, 14:48 | #6 |
Форумчанин
Регистрация: 30.01.2008
Сообщений: 314
|
+1 к предыдущему + можно и не клавишами, а получить ссылку типа application и работать через нее, т.е самым обычным для иксель методом, и даже не обязательно туда все макросы загружать - только обработки событий.
|
22.02.2009, 16:02 | #7 | |||||
Регистрация: 19.02.2009
Сообщений: 8
|
Цитата:
Цитата:
Цитата:
Цитата:
I. подключаем девайс к компу. II. Запуск <файла_1>.VBS в ручную, он в свою очередь: 1. Убивает все процессы Excel, ExRcv если такие есть (реализовано) 2. открывает ExRcv в свёрнутом виде (реализовано) 3. управляет открытым окном, т.е. ComboBox+Button 4. проверяет налич. открытого процесса Excel (реализовано) 5. запускает в открытом процессе Excel <файл_с_макросом_в_событии_open>.xl s ? можно ли проще,чем Цитата:
III. Макрос: 7. закрывает все книги в текущем процессе. (реализовано) ... теперь при нажатии кнопки на девайсе ExRcv передаёт данные в первый лист открытой им (как, видимо, считает) книги... 8. вызывает форму... анализ данных realtime (в разработке) 9. Сохранение получ. данных в файл *.txt (сам <файл_с_макросом_в_событии_open>.xl s не должен сохранятся) 10. Вызывает <файла_1>.VBS и и всё по новой... либо <файла_2>.VBS, который закрывает всё и всё) Осталость 4 пункта "придумать"... можно пример? Последний раз редактировалось RussellMur; 22.02.2009 в 16:09. Причина: addition |
|||||
27.02.2009, 20:57 | #8 |
Регистрация: 19.02.2009
Сообщений: 8
|
1. Подскажите пожалуйста: меняю ComboBox выбирается у меня теперь - всё на первый взгляд в порядке - только не срабатывает какое то событие видимо - не появляется фрейм "Only for CEM3". Если мышкой - всё в порядке. Использую так:
h2 = FindWindowEx(h1, 0, "ThunderRT6ComboBox", vbNullString) h2 = FindWindowEx(h1, h2, "ThunderRT6ComboBox", vbNullString) (т.к. нужно второе Combobox) далее SendMessage(h2, CB_SETCURSEL, 0, 0) (предворительно:Const CB_SETCURSEL = &H14E) Как "полноценно" сменить значение Combobox? ps: h1 = FindWindow(vbNullString, "ExRcv") 2. и ещё: при h3 = FindWindowEx(h1, 0, "ThunderRT6CommandButton", "End") s = SendMessage(h3, BM_CLICK, 0, 0) кнопка нажимается, программа завершает работу. Всё Ок. а при h3 = FindWindowEx(h1, 0, "ThunderRT6CommandButton", "Start") s = SendMessage(h3, BM_CLICK, 0, 0) ничего((( может правда из-за 1(см.выше) кто знает в чем проблема? Последний раз редактировалось RussellMur; 27.02.2009 в 21:03. Причина: добавление |
27.02.2009, 21:27 | #9 | |
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,856
|
Цитата:
Всё-таки, тут больше внимания уделяют вопросам работы с Excel. По VB есть множество специализированных форумов - там у Вас будет больше шансов получить совет. В любом случае, будет гораздо проще найти решение, если Вы прикрепите к сообщению 2 файла - файл ExRcv.exe, и Вашу программу (код которой Вы привели выше) |
|
27.02.2009, 23:19 | #10 | |
Регистрация: 19.02.2009
Сообщений: 8
|
Цитата:
(с установкой - вот) Заработало! 2.(см выше) заменил: Call SendMessage(h3, BM_CLICK, 0, 0) Call PostMessage(h3, BM_CLICK, 0, 0) Осталось только открыть уже в открытом Excel'е книгу c:/temp/file.xls никто не знает как лучше? Последний раз редактировалось RussellMur; 28.02.2009 в 16:15. Причина: последний вопрос |
|
|
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как написать БД, которая работает везде? =) | FeNr1z168 | БД в Delphi | 6 | 17.02.2009 08:48 |
Работа с USB или COM портами | АлександрСергеевич | Общие вопросы Delphi | 2 | 26.12.2008 04:48 |
Нужно написать софтину | xakep | Фриланс | 6 | 22.09.2008 19:10 |
написать программу которая строила графики функций | GeSerKo | Помощь студентам | 1 | 05.09.2008 21:03 |
считывание из СОМ(или USB) порта | voron29 | Общие вопросы Delphi | 1 | 29.06.2008 13:09 |