Большой Воронежский Форум
» Программирование>Управление другими программами из своей
XFAN 00:33 04.10.2006
Если кто знает подскажите как мне нажать определенную кнопку в другой программе из своей проги. Кнопка, которую надо нажать находиться на тулбаре, названия у неё нет, поэтому по названию её не вычислить. Может кто знает специальные функции? Help по WinAPI читал ни фига не понял есть там пару функци интересных, но толком как их использовать не разобрался, в инете тоже ничего толкового не нашёл.
Я так понимаю сначала надо получить доступ к окну программы через FindWindow по названию окна, а че дальше делать не пойму. Некоторые компоненты можно отыскать по названию, но не у всех оно есть, да и у которых есть не всегда ищутся. [Ответ]
MadFish 08:46 04.10.2006
Сообщение в окно программы, о том что нажата кнопка в тулбаре. Главное окно ищется по имени процесса(имени файла). Имя кнопки в тулбаре смотри в ресурсах. Дальше тривиально.

о процессах читать тут:
http://msdn.microsoft.com/library/de..._functions.asp
об окнах тут:
http://msdn.microsoft.com/library/de...ng/windows.asp
о сообщениях тут:
http://msdn.microsoft.com/library/de...sagequeues.asp
И вообще читать MSDN!!!

если нет желания ковырятся в ресурсах то имя кнопки Вам поможет найти Spy++ [Ответ]
gloomdemon 11:03 04.10.2006
XFAN,
Смотри, берёшь какую нибудь прогу которая может тебе показать ID и заголовки всех окон(кнопок, и т.д.) запущенных в системе, такая есть в поставке VusialStudio. Смотришь какой ID класса у нужной тебе кнопки, потом зная эту инфу через FindWindow получаешь её HWND.
А для её нажатия используешь SendMessage, первым параметром указываешь HWND найденной кнопки, а потом уже есть варинты:
можно отправить сообщение о том что нажали клавишу, SendMessage (handle, WM_KEYDOWN, VK_RETURN, 0);
можно отправить сообщение о том что нужно выполнить комманду, тогда будет WM_COMMAND, а что должно быть в следующих двух параметрах надо уже в msdn смотреть.

ЗЫ
если будет время может пример выложу, собствеено там всего несколько строчек
ЗЗЫ
findwindow по всем процессам, поэтому можно ещё у полученного hwnd кнопки смотреть к какому окну и какому процессу принадлежит. А вообще есть недокументированная функция интересная, она сразу и очень быстро находит у указанного процесса нужное окно, только вот не помню как называется =( [Ответ]
XFAN 20:53 04.10.2006
Спасибо, буду пробовать, о результатах через пару дней напишу [Ответ]
XFAN 13:37 03.11.2006
Блин не фига не получается.((( ID кнопки этой не ищется ваще. По-моему он и не должен искаться, потому что кнопка не стандарная, а не стандартные вроде как не регистрируюся виндой, или я ошибаюсь? Пробовал простые проги всё показывает как надо, а в этой не хочет (UserGate 4.0 прокси-сервер), там вообще какой-то интерфейс непонятный. Главное окно ищется без проблем, да его и прям по названию можно найти через FindWindow, а вот дальше ни в какую. Понятно, что когда найдешь эту кнопку, надо сообщение ей послать через PostMessage или SendMessage, это не проблема. Но вот как её найти ваще ума не дам запарился уже. В MSDN покапался, а что толку в любом случае там нет такой функции которая бы помогла в данной ситуации,
нужно же передать функции какой-нибудь параметр, я же не передам ей параметр "типа найди мне вон ту кнопку как-нибудь, не знаю как ты её будешь искать это твои проблемы"). Поэтому даже не знаю что дальше делать, куда рыть.((( [Ответ]
MadFish 16:39 03.11.2006
Spy++ Вам поможет!!!
Не можешь отловить кнопку - отлови окно где она живет, и смотри куда и какие мессаги шлются когда ее нажимаешь. Дальше дело техники... [Ответ]
XFAN 00:07 05.11.2006

Сообщение от MadFish:
Spy++ Вам поможет!!!

Спасибо, попробую Spy++ [Ответ]
Вверх