Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 2004.01.09;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.012 c
1-25345
Ил_204
2003-12-22 10:21
2004.01.09
Проблема с остановкой потока


1-25294
Ломброзо
2003-12-23 00:15
2004.01.09
Как избавиться от сообщения при закрытии Exe-Com-Сервера...


3-25190
kpx
2003-12-12 16:24
2004.01.09
Как узнать имя таблицы


1-25433
djon
2003-12-25 17:20
2004.01.09
Работа с датами


6-25473
BlackSun
2003-11-07 05:55
2004.01.09
Работа с сокетами и вылет проги





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский