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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> PostMessage WM_SYSKEYDOWN, полуработает 
:(
    Опции темы
Domoffou
Дата 8.11.2008, 02:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Здравствуйте.
В проге подключаю хук клавы в длл, в котором обработка клавиатуры и посылка выглядит таким образом:
Код

 if (wparam = WM_KEYDOWN) or (wparam = WM_SYSKEYDOWN) then
    PostMessage(Handle, WM_MYMESSAGE, wparam, lparam);

Ну так вот, если поставить SendMessage, то все работает прекрасно.
НО если человек играет, к примеру, в игру, то при большом объеме идет долгая обработка клавиш.
По идее надо бы через PostMessage, и программа славливает сообщение, но любой символ, переданный ей - пустой, если он отправлен через PostMessage!

Это сообщение отредактировал(а) Domoffou - 8.11.2008, 02:58
PM MAIL ICQ   Вверх
Domoffou
Дата 9.11.2008, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Попробовал следующим образом:
в основной программе принимаю сообщение от hook при помощи SendMessage, дальше эти параметры тупо перенаправляю себе же в другую функцию через PostMessage, и на выходе опять ничего не обрабатывается :(
PM MAIL ICQ   Вверх
dumb
Дата 9.11.2008, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

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



Domoffou, если ты еще не понял, то подсказываю: ошибка в 17-ой строке
PM MAIL   Вверх
Domoffou
Дата 9.11.2008, 23:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Простите, мой косяк.
Вот выдержка из DLL:
Код

function SysHook(ncode: integer; WParam: Word; lParam: Longint): Longint; stdcall;
begin

if ncode < 0 then
  begin
    Result:= CallNextHookEx(SysHook, nCode, wParam, lParam);
    Exit;
  end;

 if (wparam = WM_KEYDOWN) or (wparam = WM_SYSKEYDOWN) then
    SendMessage(GlobalData^.MainHandle, WM_SENTFROMME, wparam, lparam);

Result := CallNextHookEx(SysHook, nCode, wParam, lParam);
end;

Как видите, отправляю для своей application.
Вот что в самой ехе:

Код

  KBDLLHOOKSTRUCT = record
    vkCode: DWORD;
    scanCode: DWORD;
    flags: DWORD;
    time: DWORD;
    dwExtraInfo:Pointer;
  end;
  PKBDLLHOOKSTRUCT = ^KBDLLHOOKSTRUCT;


обрабатываю:
Код

WM_KEYDOWN, WM_SYSKEYDOWN:
      begin// <!--
      p := PKBDLLHOOKSTRUCT(msg.LParam)^;
      Form1.WriteToLogFile('vkCode='+IntToStr(p.vkCode)+#13+'scanCode='+IntToStr(p.scanCode)); // записываю в файл, тут все в порядке
        PostMessage(Handle, WM_SAVEKEYS, msg.wparam, msg.lparam);
      end;// -->


Код

else if (Msg.Msg = WM_SAVEKEYS) then
    begin //<!---------
    p := PKBDLLHOOKSTRUCT(msg.LParam)^;
Form1.WriteToLogFile('vkCode='+IntToStr(p.vkCode)+#13+'scanCode='+IntToStr(p.scanCode)); // записываю в файл, тут уже другие значения
    
end;

PM MAIL ICQ   Вверх
Domoffou
Дата 10.11.2008, 00:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Господа, проблема для меня очень актуальна, т.к. приходится работать с большой обработкой клавиш.
К сообщению я прикрепил файл. В нем - демо версия рабочей и нерабочей проги включая исходники.
Примитивный пример, но если в hook.drp заменить SendMessage на PostMessage Вы сразу все поймете.
В папке DEMO лежит рабочая версия.
Если что, вот зеркала:
http://ifolder.ru/8991071
http://www.filehoster.ru/files/br7446
http://www.rapidshare.ru/823955
Буду признателен за любую помощь!

Присоединённый файл ( Кол-во скачиваний: 7 )
Присоединённый файл  MyHookDemo.zip 227,36 Kb
PM MAIL ICQ   Вверх
Domoffou
Дата 10.11.2008, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



up
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0705 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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