Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.01.09;
Скачать: CL | DM;

Вниз

не могу поставить ловушку   Найти похожие ветки 

 
dolphin1   (2003-10-26 11:32) [0]

Ниже представлен код DLL
в котором я пытаюсь поставить ловушку на клаву
но под 2000,ХР не хера не работает
то есть работает но через 2-3 секунды падеют все приложения
а в оффисе(ворд) вообще нажатие клавиши обрабатывается 6 раз
не могу понять что делать

покажите пример ловушки реально работающей под 2000,ХР
К стати пример взят из Королевсева Дельфи ( прибил бы того гада что ставит такие примеры в сокровищницу. Второй день не могу поставить ловушку )

library hook;

uses
SysUtils,
Windows,
Messages,
dIALOGS,
Forms;

{$R *.res}

var
WM_MYKEYHOOK: Cardinal;
appsh : THandle;
HookHandle: HWND;

function KeyboardProc(code : integer; wParam : word; lParam : longint) : longint; stdcall;
var
AppWnd: HWND; // дескриптор приложения, в котором произошло нажатие клавишы
begin
if code < 0 then
begin
Result:= CallNextHookEx(HookHandle, Code, wParam, lParam);
Exit;
end;

if (((lParam shr 31)=1) and ((lParam and KF_UP)=0) and (wParam>=65) and (wParam<=90) ) OR ( ((lParam and KF_UP)=0) and (wParam=VK_SPACE) ) then
begin
AppWnd:= GetForegroundWindow();
SendMessage(appsh, WM_MYKEYHOOK, wParam, AppWnd);
{можно и так, что бы не сохранять дескриптор главного приложения}
end;
Result:=CallNextHookEx(HookHandle, Code, wParam, lParam);
end;

{Процедура установки HOOK-а}
procedure hookapp(switch : Boolean; hMainProg: HWND) export; stdcall;
begin
if switch=true then
begin
{Устанавливаю HOOK, если он не установлен (switch=true). }
HookHandle := SetWindowsHookEx(WH_KEYBOARD, @KeyboardProc, HInstance, 0);
appsh := hMainProg;
end
else
begin
{Удаляю функцию-фильтр, если она установлена (т.е. switch=false). }
if UnhookWindowsHookEx(HookHandle) then
MessageBox(0, "HOOK снят !", "Message from keyhook.dll", 0)
else
MessageBox(0, "HOOK снять не удалось !", "Message from keyhook.dll", 0);
HookHandle:=0;
end;
end;

exports hookapp NAME "hookapp";

begin
end.


 
Digitman   (2003-10-26 12:28) [1]

значение переменной HookHandle во всех экземплярах хук-DLL, внедряемых автоматически при установке ловушки во все процессы, неопределено.. вот и "падает" все

приложение, вызывающее hookapp и устанавливающее тем самым ловушку, должно записать результат вызова SetWindowsHookEx() в глобально доступную область памяти, организуемую с пом. CreateFileMapping() и MapViewOfFile()

каждый экз-р хук-DLL при загрузке и инициализации должен получить доступ к глобально доступной памяти с пом. тех же вышеупомянутых вызовов, прочитать из нее значение хук-хэндла и сохранить его в переменную HookHandle, прежде чем в вызове CallNextHookEx() будет происходить обращение к этой переменной


 
zapped   (2003-10-26 20:21) [2]

глянь сюда, может поможет
http://delphi.mastak.ru/cgi-bin/forum.pl?id=1066833708&n=5


 
Andriy Tysh   (2003-10-28 10:47) [3]

((lParam and KF_UP)=0) не будет работать, ибо KF_UP=$80000000, а не то что в Windows.pas.
Посмотри в WinAPI-форуме, неделю назад у меня тоже была проблема схуком. Оказалось то, что я тепе написал.
Надо ((lParam and $80000000)=0)



Страницы: 1 вся ветка

Текущий архив: 2004.01.09;
Скачать: CL | DM;

Наверх




Память: 0.45 MB
Время: 0.019 c
3-25221
Denisiy
2003-12-11 11:47
2004.01.09
dataset.locate и DBGrid


14-25580
Wizard_Ex
2003-12-16 16:54
2004.01.09
Интересно как узнать какой фонт использует программа


6-25496
zhizhko
2003-11-10 11:14
2004.01.09
Заполнение формы в браузере


1-25348
SergLight
2003-12-22 11:32
2004.01.09
Ошибка в TCombobox


14-25582
Mike Kouzmine
2003-12-18 15:30
2004.01.09
Gprs и КПК





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский