Модераторы: feodorv, GremlinProg, xvr, Fixin

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Key hook, перехват нажатия клавиш, Без использования dll, как сделать? 
:(
    Опции темы
kapbepucm
Дата 28.8.2007, 09:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 993
Регистрация: 14.6.2007
Где: Латвия

Репутация: нет
Всего: 12



Проблема из этой области. Вызываю дочерний процесс. Надо в дочке на все потоки повесить клавиатурый Hook. На не большое время. Таких действий будет несколько (дочек много). Можно ли обойтись без dll? И как в этом случае корректно вызвать SetWindowsHookExA?

Это сообщение отредактировал(а) kapbepucm - 28.8.2007, 09:56


--------------------
(С) kapbepucm
PM MAIL Skype   Вверх
jonie
Дата 28.8.2007, 23:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 7
Всего: 118



есть низкоуровневые хуки , они работают без длл-ок (но мне это не нравится лично)..
Цитата

И как в этом случае корректно вызвать SetWindowsHookExA?
?всмысле чтобы "не поставить дважды" чтоли?

P.S. возможно стоит пересмотреть архитектуру приложения и "включать" хук перед вызовом "дочек" и выключать при необходимости и уведомлять их о  сообщениях.. (я прост не вижу смысла дублировать код в "дочках" если их не одна)....


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
kapbepucm
Дата 29.8.2007, 08:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 993
Регистрация: 14.6.2007
Где: Латвия

Репутация: нет
Всего: 12



Ну, например, есть запущенных несколько дочек, и я хочу увидеть, что было нажато у конкретной дочке. Если использую WH_JOURNALRECORD, то получается в exe'шнике всё реализовать, правда Hook получается поставить на всю систему. Мне бы на конкретный процесс и только на клаву.

Это сообщение отредактировал(а) kapbepucm - 29.8.2007, 08:38


--------------------
(С) kapbepucm
PM MAIL Skype   Вверх
jonie
Дата 29.8.2007, 08:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 7
Всего: 118



хм... но ведь это ХУК глобальный, а не отправка уведомлений о нажатии клавиш процесса N родителю. Зачем хук тогда ?
Для конкретной и делай конкретно.... т.е. просто отсылай уведомления головному процессу о нажатии клавиши в дочке.
Зачем хук?


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
kapbepucm
Дата 29.8.2007, 08:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 993
Регистрация: 14.6.2007
Где: Латвия

Репутация: нет
Всего: 12



У меня получается нестандартная ситуация. Дочка-это уже готовая (не моя) прога. Кроме как использовать Hook не вижу выхода... Может есть лучшие варианты?

Это сообщение отредактировал(а) kapbepucm - 29.8.2007, 08:48


--------------------
(С) kapbepucm
PM MAIL Skype   Вверх
jonie
Дата 29.8.2007, 21:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 7
Всего: 118



чТО значит "готовая не моя" ? Нет доступа к исходникам или вам лень разбираться в чужом коде? Выражайтесь яснее....

если есть исходники то:
[Ваш модуль, имеет окно hwndMainProg]
[Дочка : запускается, ей передается HWND окна главной программы (hwndMainProg)  (да хоть через параметры вызова))]
{
оработка сообщений оконных дочкой,
если нажата клавиша, то PostMessage(hwndMainProg, WM_***,wParam,lParam);
где WM_ - нужное сообщение (вплоть до своих вида WM_USER+N, N>0; или зарегистрированных через RegisterWindowMessage(), или через нечто вроде WM_COPYDATA (ну что-то подобное было для переноса данных...))
}

в главном модуле реализуете обработку того что надо (идентификацию от какой дочки сообщение тоже можете сделать как-то дополнительно....)
Можете для связи использовать пайпы или сетевое соединение... вариантов межпроцессорного взаимодействия не один (ябы наверно юзал пайпы (pipes)..)...

Если исходников нет - тогда хук в главном модуле. И смотреть какой окно активно (например) по нему идентифицировать дочку во время обработки в хук-процедуре клавиатурного сообщения....

В общем хотите чтобы подсказали более конкретно описывайте проблему.. мыж не гадалки)


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
kapbepucm
Дата 30.8.2007, 10:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 993
Регистрация: 14.6.2007
Где: Латвия

Репутация: нет
Всего: 12



Цитата(jonie @  29.8.2007,  21:32 Найти цитируемый пост)
мыж не гадалки
Дочка- *.exe без исходников. Моя ситуация не позволяет создавать DLL (другой язык программирования, не важно какой). В общем, меня заинтересовал параметр dwThreadId. Думал, можно конкретно указать на что Hook вешать (типа, зачем вешать на всё, если есть возможность указать куда).

Это сообщение отредактировал(а) kapbepucm - 30.8.2007, 10:33


--------------------
(С) kapbepucm
PM MAIL Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.1179 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.