|
нажать ОК в messagebox
|
|||
---|---|---|---|
#18+
Всем всего доброго! Подскажите выход. Макрос из Excel, обращается к сторонней программке "ВВЕ" и заполняет в ней поля данными. Затем отсылает к ней нажатие кнопки:"Добавить" Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8.
Программа "ВВЕ" выдаёт message box с кнопкой ОК (Успешно добавлено) Макрос останавливается в ожидании нажатия ОК Каким образом эту задачу (нажатия) возложить на макрос и продолжить его работу? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2018, 15:56 |
|
нажать ОК в messagebox
|
|||
---|---|---|---|
#18+
емнип SendMessage(BM_CLICK ... https://msdn.microsoft.com/en-us/library/windows/desktop/bb775985(v=vs.85).aspx там только нюанс, что окно с кнопкой "ОК" должно быть активным наверху z-ордера окон. Иначе не сработает.VladimirSk, ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2018, 16:59 |
|
нажать ОК в messagebox
|
|||
---|---|---|---|
#18+
VladimirSk, sendkey ENTER подойдет? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2018, 22:09 |
|
нажать ОК в messagebox
|
|||
---|---|---|---|
#18+
Bobgos, К сожалению не всё так просто, увы.( ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2018, 08:09 |
|
нажать ОК в messagebox
|
|||
---|---|---|---|
#18+
ldfanate, Код: vbnet 1.
Остановка в этом месте кода !!! Посла нажатия кнопки "Add" макрос ожидает ответа от появившегося окна "Message", и всё что далее, не исполняется ! Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2018, 08:49 |
|
нажать ОК в messagebox
|
|||
---|---|---|---|
#18+
ldfanate, Если бы окно (msgbox) было активным? А как его сделать активным, если макрос стоит, не выполняется !? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2018, 11:45 |
|
нажать ОК в messagebox
|
|||
---|---|---|---|
#18+
https://msdn.microsoft.com/ru-ru/library/windows/desktop/ms644950(v=vs.85).aspx SendMessage Sends the specified message to a window or windows. The SendMessage function calls the window procedure for the specified window and does not return until the window procedure has processed the message. https://msdn.microsoft.com/ru-ru/library/windows/desktop/ms644944(v=vs.85).aspx PostMessage Places (posts) a message in the message queue associated with the thread that created the specified window and returns without waiting for the thread to process the message. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2018, 12:25 |
|
нажать ОК в messagebox
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev, Спасибо !!! С одной стороны - работает ! Но окна message не реагируют ни на что Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
и после окончания работы макроса остаётся куча этих самых "Message" с кнопкой ОК ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2018, 15:39 |
|
нажать ОК в messagebox
|
|||
---|---|---|---|
#18+
VladimirSk, Код: vbnet 1. 2. 3.
Вот он выход - найден ! Можно и SendMessage попробовать. Однако С П А С И Б О !!! ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2018, 16:31 |
|
нажать ОК в messagebox
|
|||
---|---|---|---|
#18+
VladimirSk, 1) Не очень понимаю, что же у Вас в реальности выполняется и происходит. Но беглый поиск по I-net привел к массе сообщений, что поведение MessageBox'а меняется в зависимости от его типа. Самый не убиваемый ((( вроде MB_YESNO Сам не проверял, но народ советует посылать hWnd = FindWindow( .... ) If (hWnd <> 0) Then SendMessage hWnd, WM_COMMAND, IDNO, ByVal 0& End if http://forums.codeguru.com/showthread.php?250538-Closing-a-Yes-No-message-box-via-code 2) Если задача критическая и через очередь сообщений действительно не получается, то тогда остается только взять в руки C и попытаться злобно Hook в приложение повесить. Но это и достаточно сложно и в эксплуатации могут быть проблемы (с антивирусами, с правами и пр.) Например какой то пример hook'а есть тут http://forums.codeguru.com/showthread.php?468963-sample-source-MessageBox-API-Hook Но я сам не проверял и такого в продакшинах не делал. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2018, 16:43 |
|
нажать ОК в messagebox
|
|||
---|---|---|---|
#18+
только всётаки не SendMessage hwnd_ok_b, WM_KEYDOWN, vbKeyReturn, 0 а SendMessage hwnd_ok_b, BM_CLICK, 0, 0 ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2018, 15:09 |
|
нажать ОК в messagebox
|
|||
---|---|---|---|
#18+
ну и разумеется - если ваша внешняя программа вызывается через OLE из вашей экселины, и msgbox всплывает в окне программы прямо в процессе OLE-вызова из экселя, то ессно обработку нажатия "ОК" нужно писать не в этой экселине. А в начале макроса, до начала OLE-взаимодействия с внешней программой, - запускать второй экземпляр экселя через createobject("Excel.Application"), в нём открывать какуюто дополнительную книгу (Гипервизор.xlsm :) ), вызывать в нём через application.run какойнить макрос, передавать в него hwnd программы, чтобы макрос в отдельном экземпляре экселя запустил таймер, который раз в несколько секунд будет по переданному hwnd искать всплывший msgbox и жамкать "ОК". Тогда у Вас полноценная двухтредовая обработка получится - один "поток" взаимодействует с программой, второй давит всплывающие в ней окна, мешающие пакетной обработке. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2018, 15:21 |
|
|
start [/forum/topic.php?fid=61&msg=39599733&tid=2172402]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
38ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
54ms |
get tp. blocked users: |
2ms |
others: | 278ms |
total: | 421ms |
0 / 0 |