| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > VB6 > Управление чужой программой |
| Автор: ProggerXandCo 1.7.2010, 15:59 |
| Помогите, пожалуйста, с синтаксисом функции SendMessage (VB 6.0). Если можно, дайте пример. Зараннее благодарен! |
| Автор: neic 1.7.2010, 16:30 | ||||||||
Вот смотри:
тут: hwnd - идентификатор окна (куда будешь посылать сообщение) WM_KEYDOWN - в данном случае указываем, что мы нажимаем виртуальную клавишу на клаве VK_DELETE - указываем, что нажимаем кнопку Delete 1L - пока без понятия, да думаю он и не важен, т.к. он дополнительный Добавлено @ 16:36 Чтобы найти hwnd можно сделать следующее:
или так:
|
| Автор: neic 1.7.2010, 17:06 | ||
| ~FoX~ Я тут так попробовал попробовал. Но сам понял, что не разобрался =) Вот смотри как послать калькулятору цифру 1?
И ни не получается. Я так понимаю трабла в res& = GetWindow(rc&, GW_CHILD), но какая? |
| Автор: ProggerXandCo 1.7.2010, 21:54 |
| А как тогда будет выражаться нажатие на кнопку чужой формы?Или выделение текстового поля? |
| Автор: ~FoX~ 1.7.2010, 22:49 | ||
| Ну во первых кто такой "Калькулятор плюс"? Честно не знаю что за потомок вернется по GetWindow, я бы использовал FindWindowsEx
Ну а дальше надо посмотреть что там едиту можно заслать |
| Автор: I_Am_Rock 2.7.2010, 13:24 | ||
Нажатие SendMessage c WM_COMMAND и BN_CLICKED как wparam (в принципе просто 0) Выделение текста SendMessage c WM_SETFOCUS или функция SetFocus если я ничего не путаю ) |
| Автор: ProggerXandCo 2.7.2010, 21:08 | ||
Извините,пожалуйста,нельзя ли объяснить понятнее? с 1L - просит list separator и непонятно последнее сообщение I_Am_Rock - а. Помогите, пожалуйста с синтаксисом нажатия кнопки чужого контрола!(последнее сообщение I_Am_Rock) |
| Автор: I_Am_Rock 3.7.2010, 00:21 | ||
| А вот сам I_Am_Rock и объяснит. Вот вобщем пример как надо . Перед запуском программы нужно открыть Пуск - Выполнить. В текст поле нужно ввести calc (чтоб потом калькулятор запустился) Затем нужно запустить форму с кодом, который ниже. При загрузке она 1) Найдет родительское окно по заголовку, 2) Найдет дочернее окно по заголовку (вообще это кнопка, конечно, но для windows все такие объекты управления - это "окна") 3) Отошлет сообщение этому дочернему окну-кнопке о том, что ему пора нажиматься. Ясное дело - в итоге должен запустить Калькулятор.
|
| Автор: ProggerXandCo 3.7.2010, 23:37 |
| А как можно просто обратить "внимание" программы на окно, чтобы пускать оператор SendKeys(для этого окна)? Простая его постановка в конце примера I_Am_Rock - а ничем не помогла (Процедура - загрузка Form1). |
| Автор: ~FoX~ 4.7.2010, 23:08 |
FindWindow |
| Автор: ProggerXandCo 8.7.2010, 10:28 |
| Не помогло, ~FoX~.Окно находит, но SendKeys не работают. |
| Автор: ~FoX~ 8.7.2010, 16:38 | ||||||
| Поглядев с помощью WinSight на калькулятор - понял, что в Edit нажимать кнопки бесполезно, ибо он выключен ))) Есть два варианта решения 1. нажимать кнопки в окне
2. Слать в едит непосредственно нужный текст WM_SENDTEXT, но тут геморойно потому что приходиться сначала получить текст, посчитать длинну прибавить к полученному число и увеличить длинну, не забывая про запятую.... Добавлено @ 16:45 Модуль
Кнопа
|
| Автор: ProggerXandCo 8.7.2010, 19:13 |
| Извините, пожалуйста, но я имел в виду вначале включить обнаружение уже запущенного окна, например, Блокнота, а потом управлять им с помощью SendKeys. Или это невозможно? |
| Автор: ~FoX~ 8.7.2010, 19:33 | ||
Еще раз Забудь ты про SendKeys, не все контролы обрабатывают нажатие кнопок... Например:
Ты определись....Нажатие кнопки чего? Мыши, клавиатуры, программной, etc...? Нажатие кнопки WM_KEYDOWN/WM_KEYUP/WM_CHAR... Нажатие кнопы мыши WM_L/R/MBUTTONUP/DBLCLICK... Выделение WM_SETFOCUS и т.д. Нельзя управлять контролами внутри приложения с помощью клавиатуры.... Все действия не обязательно обрабатываются самим контролом, в большинстве случаев этим занимается окно предок объекта, именно окно Application или Form (не знаю как в ВБ)... |
| Автор: Jkyskienuh 12.12.2020, 12:05 |
Модератор: Сообщение скрыто. |