Перехват сообщений одной проги - другой
От: rom30  
Дата: 14.01.02 22:21
Оценка:
Есть диалог-базед прога с кнопой.Как надо сделать другую прогу, чтобы она отлавливала
нажатие кнопки на первой программе. Она должна быть именно как Spy. Т.е. можно бы конечно сделать что-то типа они друг-друга нюхают. Но надо СОВЕРШЕННО две независимые
проги и одна просто перехватывает событие от другой. Ето не шпионство. Нужно по-жизни
Спасибо
Re: Перехват сообщений одной проги - другой
От: Dr_Sh0ck Беларусь  
Дата: 14.01.02 23:02
Оценка:
Здравствуйте rom30, Вы писали:

R>Есть диалог-базед прога с кнопой.Как надо сделать другую прогу, чтобы она отлавливала

R>нажатие кнопки на первой программе. Она должна быть именно как Spy. Т.е. можно бы конечно сделать что-то типа они друг-друга нюхают. Но надо СОВЕРШЕННО две независимые
R>проги и одна просто перехватывает событие от другой. Ето не шпионство. Нужно по-жизни
R>Спасибо

Я бы попробовал так. Сначала тебе нужно получить ID требуемой кнопки (подсмотреть Spy++, например). Следующие действия должна выполнять программа-шпион:

— определить хэндл диалога в котором находится эта кнопка (например, с помощью FindWindow или FindWindowEx)

— определить хэндл кнопки (ее ID ты уже знаешь — он не меняется), а хэндл диалога ты уже нашел

— создать подкласс кнопки в адресном пространстве процесса с диалогом. Для этого процедуру подкласса нужно вынести в ДЛЛ. Чтобы спроецировать ДЛЛ в адресное пространство процесса с диалогом можно воспользоваться, например SetWindowsHookEx (подробности в книге Рихтера )

— в процедуре подкласса перекрываешь сообщение WM_LBUTTONDOWN. В его обработчике ты и сможешь сообщить в "свой" процесс, что кнопка нажата.

Если программа-шпион должна завершаться раньше программы с диалогом, то позаботься об обратных действиях: возвращение исходной оконной процедуры кнопке и т.п.

Ф-у-у-ф!!! Вроде ничего не забыл!!! (а может забыл? )
Do not fake yourself ;)
ICQ#: 198114726
Re[2]: Перехват сообщений одной проги - другой
От: Аноним  
Дата: 15.01.02 00:48
Оценка:
Здравствуйте Dr_Sh0ck, Вы писали:
Пож-та еще раз!
Есть 2 диалога. Один понятно активный, другой- нет.Все! На одном скажем 3 кнопы (IDC_B1,IDC_B2,IDC_B3). пусть они имеют обработчик и в них что-то делается .
Вот ОЧЧЕнь важен другой диалог. Пусть в нем есть edit. Надо чтобы принажатии на кнопки в 1-м диалоге(программе)
в этом edit-e высвечивалось хотябы число(IDC_B1) кнопки. Ведь все идениф-ры — числа.Да?
Можно былобы сделать что-то типа — один делает SendMessage — другой откликается. Но Мне надо именно сделать приблизительно как SPY++ отлавливает сообщения, потому как я собираюсь отловить совершенно чужой проги
Если можно каркас приложения. Ну не грамотный я !!!!




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


R>>Есть диалог-базед прога с кнопой.Как надо сделать другую прогу, чтобы она отлавливала

R>>нажатие кнопки на первой программе. Она должна быть именно как Spy. Т.е. можно бы конечно сделать что-то типа они друг-друга нюхают. Но надо СОВЕРШЕННО две независимые
R>>проги и одна просто перехватывает событие от другой. Ето не шпионство. Нужно по-жизни
R>>Спасибо

DS>Я бы попробовал так. Сначала тебе нужно получить ID требуемой кнопки (подсмотреть Spy++, например). Следующие действия должна выполнять программа-шпион:


DS>- определить хэндл диалога в котором находится эта кнопка (например, с помощью FindWindow или FindWindowEx)


DS>- определить хэндл кнопки (ее ID ты уже знаешь — он не меняется), а хэндл диалога ты уже нашел


DS>- создать подкласс кнопки в адресном пространстве процесса с диалогом. Для этого процедуру подкласса нужно вынести в ДЛЛ. Чтобы спроецировать ДЛЛ в адресное пространство процесса с диалогом можно воспользоваться, например SetWindowsHookEx (подробности в книге Рихтера ;) )


DS>- в процедуре подкласса перекрываешь сообщение WM_LBUTTONDOWN. В его обработчике ты и сможешь сообщить в "свой" процесс, что кнопка нажата.


DS>Если программа-шпион должна завершаться раньше программы с диалогом, то позаботься об обратных действиях: возвращение исходной оконной процедуры кнопке и т.п.


DS>Ф-у-у-ф!!! Вроде ничего не забыл!!! (а может забыл? :)) )

DS>
Re[3]: Перехват сообщений одной проги - другой
От: Dr_Sh0ck Беларусь  
Дата: 15.01.02 01:14
Оценка:
Здравствуйте Аноним, Вы писали:

А>Пож-та еще раз!

А>Есть 2 диалога. Один понятно активный, другой- нет.Все! На одном скажем 3 кнопы (IDC_B1,IDC_B2,IDC_B3). пусть они имеют обработчик и в них что-то делается .
А>Вот ОЧЧЕнь важен другой диалог. Пусть в нем есть edit. Надо чтобы принажатии на кнопки в 1-м диалоге(программе)
А>в этом edit-e высвечивалось хотябы число(IDC_B1) кнопки. Ведь все идениф-ры — числа.Да?
А>Можно былобы сделать что-то типа — один делает SendMessage — другой откликается. Но Мне надо именно сделать приблизительно как SPY++ отлавливает сообщения, потому как я собираюсь отловить совершенно чужой проги
А>Если можно каркас приложения. Ну не грамотный я !!!!

То есть, если я правильно понял, ты хочешь перехватить сообщение от одной чужой программы и в ответ на него сделать что-то в другой чужой программе?

(если не ответишь в течение 5 минут — ухожу спатоньки. следующий коннект — завтра ночью )
Do not fake yourself ;)
ICQ#: 198114726
Re[4]: Перехват сообщений одной проги - другой
От: Аноним  
Дата: 15.01.02 12:01
Оценка:
Здравствуйте Dr_Sh0ck, Вы писали:
ДА! ДА! ДА!
Именно так! От чужой проги !
И если можно шаблон на rom30@mail.ru
т.е. мне надо сделать что-то типа SPY.
Только SPY умеет все видеть. Мне все не надо смотреть , а только одну прогу смотреть — у нее есть заголовок окна, и ехе-шное имя.
Надо знать : нажал, например, кнопу на 1-й проге, — и мой "шпион" увидел это событие(сообщение). Вот и все!



DS>Здравствуйте Аноним, Вы писали:


А>>Пож-та еще раз!

А>>Есть 2 диалога. Один понятно активный, другой- нет.Все! На одном скажем 3 кнопы (IDC_B1,IDC_B2,IDC_B3). пусть они имеют обработчик и в них что-то делается .
А>>Вот ОЧЧЕнь важен другой диалог. Пусть в нем есть edit. Надо чтобы принажатии на кнопки в 1-м диалоге(программе)
А>>в этом edit-e высвечивалось хотябы число(IDC_B1) кнопки. Ведь все идениф-ры — числа.Да?
А>>Можно былобы сделать что-то типа — один делает SendMessage — другой откликается. Но Мне надо именно сделать приблизительно как SPY++ отлавливает сообщения, потому как я собираюсь отловить совершенно чужой проги
А>>Если можно каркас приложения. Ну не грамотный я !!!!

DS>То есть, если я правильно понял, ты хочешь перехватить сообщение от одной чужой программы и в ответ на него сделать что-то в другой чужой программе?


DS>(если не ответишь в течение 5 минут — ухожу спатоньки. следующий коннект — завтра ночью :)) )
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.