Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.04.2008, 19:03   #1
zhefran
Пользователь
 
Аватар для zhefran
 
Регистрация: 08.04.2008
Сообщений: 37
По умолчанию Проблема с хуком, Делаю подмену клавиш мыши

Поставил хук, который подменивает нажатие левой кнопки мыши на нажатие средней. Проблема в том, что в Word не срабатывает.
В блокноте и в броузере работает, а в Word нет!

Вытяжка с MSDN:

Цитата:
The Mouse Wheel

The mouse wheel combines the features of a wheel and a mouse button. The wheel has discrete, evenly-spaced notches. When you rotate the wheel, a wheel message is sent to your application as each notch is encountered. The wheel button can also operate as a normal Windows middle (third) button. Pressing and releasing the mouse wheel sends standard WM_MBUTTONUP and WM_MBUTTONDOWN messages. Double clicking the third button sends the standard WM_MBUTTONDBLCLK message.

В моем хуке идет такое дело:

Код:
Function SysMsgProc(Code:Integer; WParam:LongInt; LParam:LongInt):LongInt; stdcall;
Var Msg:TMessage;
Begin
 IF (Code=HC_ACTION) then
  Case TMsg(Pointer(LParam)^).Message OF
   WM_lBUTTONDOWN: TMsg(Pointer(LParam)^).Message:=WM_mbuttondown
      else Result:=CallNextHookEx(SysHook,Code,WParam,LParam);
  End;
end;
Почему в Word это не работает?
zhefran вне форума Ответить с цитированием
Старый 16.04.2008, 11:41   #2
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

А с какой стати здесь SysMsgProc?

Читайте MSDN целиком:

Цитата:
WH_SYSMSGFILTER
Installs a hook procedure that monitors messages generated as a result of an input event in a dialog box, message box, menu, or scroll bar. The hook procedure monitors these messages for all applications in the same desktop as the calling thread. For more information, see the SysMsgProc hook procedure.
B_N вне форума Ответить с цитированием
Старый 16.04.2008, 12:06   #3
zhefran
Пользователь
 
Аватар для zhefran
 
Регистрация: 08.04.2008
Сообщений: 37
По умолчанию

Можно обьяснить как для чайника?
zhefran вне форума Ответить с цитированием
Старый 16.04.2008, 12:10   #4
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Цитата:
Сообщение от zhefran Посмотреть сообщение
Можно обьяснить как для чайника?
Зачем Вы из всего многообразия хуков выбрали самый неудобный? Чем Вам не понравились WH_CALLWNDPROC, WH_GETMESSAGE, WH_MOUSE, WH_MOUSE_LL?
B_N вне форума Ответить с цитированием
Старый 16.04.2008, 12:21   #5
zhefran
Пользователь
 
Аватар для zhefran
 
Регистрация: 08.04.2008
Сообщений: 37
По умолчанию

Сама процедура установки:
Код:
procedure Hook(Flag:Boolean); export; stdcall;
Begin
 IF Flag then SysHook:=SetWindowsHookEx(WH_Getmessage,@SysMsgProc,HInstance,0) Else
  Begin
   UnhookWindowsHookEx(SysHook);
   SysHook:=0;
  End;
End;

exports Hook;
Я не могу понять какая разница как я назову функцию отлавливания сообщения SysMsgProc,KeyboardProc or MouseProc?

Последний раз редактировалось zhefran; 16.04.2008 в 12:26.
zhefran вне форума Ответить с цитированием
Старый 16.04.2008, 12:26   #6
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

zhefran, давайте по порядку. Хук в ворде срабатывает вообще?
B_N вне форума Ответить с цитированием
Старый 16.04.2008, 12:36   #7
zhefran
Пользователь
 
Аватар для zhefran
 
Регистрация: 08.04.2008
Сообщений: 37
По умолчанию

Получается так, что одинарный клик ЛКМ в ворде не срабатавает, тоисть курсор в установленное место не устанавливается, при зажатой ЛКМ и движении мишки выделение не происходит.
zhefran вне форума Ответить с цитированием
Старый 16.04.2008, 12:50   #8
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Цитата:
Сообщение от zhefran Посмотреть сообщение
Я не могу понять какая разница как я назову функцию отлавливания сообщения SysMsgProc,KeyboardProc or MouseProc?
Разница в том, что никто, кроме Вас не знает, что Вы как назвали и что как вызываете, а именаиспользуются предопределённые.

Цитата:
Сообщение от zhefran Посмотреть сообщение
Получается так, что одинарный клик ЛКМ в ворде не срабатавает, тоисть курсор в установленное место не устанавливается, при зажатой ЛКМ и движении мишки выделение не происходит.
Где в хуке реакция на поднятие кнопки?
B_N вне форума Ответить с цитированием
Старый 16.04.2008, 12:57   #9
zhefran
Пользователь
 
Аватар для zhefran
 
Регистрация: 08.04.2008
Сообщений: 37
По умолчанию

Добавил - то же самое!
zhefran вне форума Ответить с цитированием
Старый 16.04.2008, 13:30   #10
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Цитата:
Сообщение от zhefran Посмотреть сообщение
Добавил - то же самое!
Значит Word исходит (я так понимаю, про скроллинг речь?) из текущего состояния кнопок, а сообщения использует по своему разумению.
B_N вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Visual C++: Что не так делаю? N!ckeL Помощь студентам 8 19.05.2008 11:28
правильно ли я делаю? andrey4623 Общие вопросы Delphi 2 07.03.2008 20:14
Делаю Кроссворды Иллидан Фриланс 3 03.02.2008 21:50
делаю автопостер Филлип Помощь студентам 4 06.11.2007 16:11