Имитация нажатия кнопки на тулбаре в чужой программе
От: UNRoman  
Дата: 11.04.03 09:19
Оценка:
Есть программа на VB. Как правильно с имитировать нажатие-отжатие кнопки на тулбаре в чужой программе? Sendmessage с TB_PRESSBUTTON или TB_SETSTATE нажимает-отжимает кнопку,но при этом должно произойти событие в этой чужой программе в другом окне. Вручную происходит, а программно нет.
Re: Имитация нажатия кнопки на тулбаре в чужой программе
От: SergH Россия  
Дата: 11.04.03 09:43
Оценка:
Здравствуйте, UNRoman, Вы писали:

UNR>Есть программа на VB. Как правильно с имитировать нажатие-отжатие кнопки на тулбаре в чужой программе? Sendmessage с TB_PRESSBUTTON или TB_SETSTATE нажимает-отжимает кнопку,но при этом должно произойти событие в этой чужой программе в другом окне. Вручную происходит, а программно нет.


А если по простому WM_COMMAND послать?
Делай что должно, и будь что будет
Re[2]: Имитация нажатия кнопки на тулбаре в чужой программе
От: UNRoman  
Дата: 11.04.03 10:17
Оценка:
Здравствуйте, SergH, Вы писали:

SH>Здравствуйте, UNRoman, Вы писали:


UNR>Есть программа на VB. Как правильно с имитировать нажатие-отжатие кнопки на тулбаре в чужой программе? Sendmessage с TB_PRESSBUTTON или TB_SETSTATE нажимает-отжимает кнопку,но при этом должно произойти событие в этой чужой программе в другом окне. Вручную происходит, а программно нет.


SH>А если по простому WM_COMMAND послать?


У меня есть пример посылки WM_COMMAND:
SendMessage ProgramHwnd, WM_COMMAND, 100 + 8 — 1, ByVal ToolBarhWnd
Нашел в интернете и переделал. Видимо неправильно.
ProgramHwnd — главное окно программы
ToolBarhWnd — тулбар
8 — номер кнопки по порядку.
Не понятен парметр 100 + 8 — 1
Re: Имитация нажатия кнопки на тулбаре в чужой программе
От: Valerio Россия linkedin.com/in/boronin
Дата: 11.04.03 13:40
Оценка:
Здравствуйте, UNRoman, Вы писали:

UNR>Есть программа на VB. Как правильно с имитировать нажатие-отжатие кнопки на тулбаре в чужой программе? Sendmessage с TB_PRESSBUTTON или TB_SETSTATE нажимает-отжимает кнопку,но при этом должно произойти событие в этой чужой программе в другом окне. Вручную происходит, а программно нет.


Просто запусти Spy++ и посмотри какие и сколько сообщений надо отправить?
... << RSDN@Home 1.0 beta 6a >>
Valery A. Boronin, RSDN Team, linkedin.com\in\boronin
R&D Mgmt & Security. AppSec & SDL. Data Protection and Systems Programming. FDE, DLP, Incident Management. Windows Filesystems and Drivers.
Re[3]: Имитация нажатия кнопки на тулбаре в чужой программе
От: SergH Россия  
Дата: 11.04.03 14:07
Оценка:
Здравствуйте, UNRoman, Вы писали:

SH>А если по простому WM_COMMAND послать?


UNR>У меня есть пример посылки WM_COMMAND:

UNR>SendMessage ProgramHwnd, WM_COMMAND, 100 + 8 — 1, ByVal ToolBarhWnd
UNR>Нашел в интернете и переделал. Видимо неправильно.
UNR>ProgramHwnd — главное окно программы
UNR>ToolBarhWnd — тулбар
UNR>8 — номер кнопки по порядку.
UNR>Не понятен парметр 100 + 8 — 1

Parameters
wParam
The high-order word specifies the notification code if the message is from a control. If the message is from an accelerator, this value is 1. If the message is from a menu, this value is zero.
The low-order word specifies the identifier of the menu item, control, or accelerator.

lParam
Handle to the control sending the message if the message is from a control. Otherwise, this parameter is NULL.



Честно говоря, я не знаю является ли панель исптрументов контролом в данном случае. Наверное да. Тогда в wParam нужно (BN_CLICKED << 16) + id, где id — команда. Но, скорее всего, отправка такой же команды от имени меню тоже прокатит. Тогда всё ещё проще — в wParam id, в lParam — 0.
Делай что должно, и будь что будет
Re[2]: Имитация нажатия кнопки на тулбаре в чужой программе
От: UNRoman  
Дата: 14.04.03 08:37
Оценка:
Здравствуйте, Valerio, Вы писали:

V>Здравствуйте, UNRoman, Вы писали:


UNR>Есть программа на VB. Как правильно с имитировать нажатие-отжатие кнопки на тулбаре в чужой программе? Sendmessage с TB_PRESSBUTTON или TB_SETSTATE нажимает-отжимает кнопку,но при этом должно произойти событие в этой чужой программе в другом окне. Вручную происходит, а программно нет.


V>Просто запусти Spy++ и посмотри какие и сколько сообщений надо отправить?


Большое спасибо!!! Помогло SendMessage ParenthWnd,WM_COMMAND,idCommand,ToolbarhWnd
где idCommand из структуры TB_BUTTON.
А в SPY++:

S WM_PARENTNOTIFY fwEvent:WM_LBUTTONDOWN xPos:309 yPos:21 [wParam:00000201 lParam:00150135]
R WM_PARENTNOTIFY lResult:00000000
S ..WM_MOUSEACTIVATE hwndTopLevel:00050324 nHittest:HTCLIENT uMsg:WM_LBUTTONDOWN [wParam:00050324 lParam:02010001]
R ..WM_MOUSEACTIVATE fuActivate:MA_ACTIVATE [lResult:00000001]
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.