Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Windows сообщения... Не работает. Почему? 
:(
    Опции темы
Delphins
  Дата 15.6.2006, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 10.8.2005
Где: Россия, Краснодар

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



Вот написал такую билиотеку дял отлова сообщений. (Суть - отлов нажатия мультимедия клваиш)
Код

library HooK;
uses
  Windows, Messages;

const
  WM_NEXT_TRACK = WM_USER + 2;
  WM_PREV_TRACK = WM_USER + 3;
  //------------------------
  KEY_NEXT_TRACK = 176;
  KEY_PREV_TRACK = 177;

var
  Hk: HHook;
  Wnd: HWND;


function Proc( nCode: Integer; wParam, lParam: Integer ): Integer; stdcall;
begin
  if ( nCode = HC_ACTION ) and ( ( ( lParam shr 16 ) and KF_UP ) = 0 ) then
  begin
    Result := CallNextHookEx( Hk, nCode, wParam, lParam );
    Exit;
  end
  else
  begin
    Result := 0;
    case wParam of
      KEY_NEXT_TRACK:
        begin
          //MessageBox( wnd, 'NEXT_TRACK', 'HOOK', MB_ICONINFORMATION );
          SendMessage( Wnd, WM_PREV_TRACK, lParam, 0 );
        end;
      KEY_PREV_TRACK:
        begin
          //MessageBox( wnd, 'PREV_TRACK', 'HOOK', MB_ICONINFORMATION );
          SendMessage( Wnd, WM_PREV_TRACK, lParam, 0 );
        end;
    else
      Result := CallNextHookEx( Hk, nCode, wParam, lParam );
    end;
  end;
end;

procedure InstallHook( aHandle: HWND ); stdcall;
begin
  Wnd := aHandle;
  Hk := SetWindowsHookEx( WH_KEYBOARD, @Proc, Hinstance, 0 );
end;

procedure RemoveHook;
begin
  UnhookWindowsHookEx( Hk );
end;

exports InstallHook, RemoveHook;

begin
end.



Она ловить сообщения. Но вот либо не отсылает, либо прога моя не принимает.

Вырезка из проги:

Код

const
  WM_NEXT_TRACK = WM_USER + 2;
  WM_PREV_TRACK = WM_USER + 3;

//-------------------- CUT --------------
public
    procedure NEXT_TRACK( var msg: TMessage );  message WM_NEXT_TRACK;
    procedure PREV_TRACK( var msg: TMessage );  message WM_PREV_TRACK;

//------------------- CUT ----------------

procedure InstallHook( aHandle: HWND ); external 'hook.dll';
procedure RemoveHook; external 'hook.dll';
//------------------- CUT ----------------

  InstallHook( Frm_Main.Handle ); // В OnCreate находится.

//------------------- CUT ----------------

procedure TFrm_Main.NEXT_TRACK( var msg: TMessage );
begin
  ShowMessage( 'NEXT TRACK' ); // debug
  if Tb_Next.Enabled then  Tb_Next.Click
end;

procedure TFrm_Main.PREV_TRACK( var msg: TMessage );
begin
  ShowMessage( 'PREV TRACK' ); // debug
  if Tb_Previous.Enabled then Tb_Previous.Click
end;


Для проверки поставил вызов сообщения. Не вызывается.
Че не так?   smile 
 
PM MAIL ICQ Skype MSN   Вверх
Alexeis
Дата 15.6.2006, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 16
Всего: 459



Попробуйте зарегистрировать сообщения перед тем как их отсылать
 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
RA
Дата 15.6.2006, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Брутальный буратина
****


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

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



Delphins, Дык самое главное не показал, как ты ловиш сообщения от длл ?. 
PM   Вверх
Delphins
Дата 15.6.2006, 18:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 10.8.2005
Где: Россия, Краснодар

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



2 код ловит. 
PM MAIL ICQ Skype MSN   Вверх
Rouse_
Дата 16.6.2006, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 469
Регистрация: 23.4.2005

Репутация: 18
Всего: 29



Вот эти две переменные будут неинициализированными при загрузке в чужое адресное пространство (обнулены)

Код

  Hk: HHook;
  Wnd: HWND;

Соотвественно вот это не отработает:
Код

CallNextHookEx( Hk, nCode, wParam, lParam );

и вот это сообщение уйдет в небо:
Код

SendMessage( Wnd, WM_PREV_TRACK, lParam, 0 );
 


--------------------
 Vae Victis
(Горе побежденным (лат.))
Демо с открытым кодом: http://rouse.drkb.ru 
PM MAIL WWW ICQ   Вверх
Damarus
Дата 17.6.2006, 21:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 671
Регистрация: 6.5.2006

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



Rouse_, CallNextHookEx игнорирует первый параметор.

Delphins, лучше использовать не SendMessage, а PostMessage + совет Rouse_'а. 
PM MAIL ICQ Jabber   Вверх
bems
Дата 26.6.2006, 06:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 21
Всего: 88



Цитата(Damarus @  17.6.2006,  21:16 Найти цитируемый пост)
CallNextHookEx игнорирует первый параметор.

только начиная с 2К 


--------------------
Обижено школьников: 8
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

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


 




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


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

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