Текущий архив: 2002.04.18;
Скачать: CL | DM;
Вниз
Oops! Проблемка!!! Найти похожие ветки
← →
XM-AD (2002-01-23 13:29) [0]Ставлю хук на отлов нажатия клавиши, и у меня пропадает повтор, т.е. если я нажал и держу, например клавишу "а" то у меня выводится только один раз "а"! Как избежать этого?
← →
Виктор Щербаков (2002-01-23 15:08) [1]Код хука?
← →
XM-AD (2002-01-23 16:34) [2]Лежит в факах или статьях. Юнит SendKey, тот что отлавливает нажите на клавиши управления курсором...
← →
XM-AD (2002-01-25 10:08) [3]
library SendKey;
uses SysUtils, Classes, Windows, Messages;
const
{пользовательские сообщения}
wm_FormHide_Event = wm_User + 137;
{handle для ловушки}
HookHandle: hHook = 0;
var
SaveExitProc : Pointer;
{собственно ловушка}
function Key_Hook(Code: integer; wParam: word; lParam: Longint): Longint;stdcall; export;
var H: HWND;
begin
{если Code>=0, то ловушка может обработать событие}
if (Code >= 0) and (lParam and $40000000 = 0)
then begin
{ищем окно по имени класса и по заголовку }
H := FindWindow("TForm1", "SpyClient");
{это те клавиши?}
Case wParam of
VK_SCROLL: SendMessage(H, wm_FormHide_Event, 0, 0);
end;
{если 0, то система должна дальше обработать это событие}
{если 1 - нет}
Result:=0;
end
else if Code<0 {если Code<0, то нужно вызвать следующую ловушку}
then Result := CallNextHookEx(HookHandle,Code, wParam, lParam);
end;
{при выгрузке DLL надо снять ловушку}
procedure LocalExitProc; far;
begin
if HookHandle<>0
then begin
UnhookWindowsHookEx(HookHandle);
ExitProc := SaveExitProc;
end;
end;
exports Key_Hook;
{инициализация DLL при загрузке ее в память}
begin
{устанавливаем ловушку}
HookHandle := SetWindowsHookEx(wh_Keyboard, @Key_Hook,
hInstance, 0);
if HookHandle = 0
then MessageBox(0, "Unable to set hook!", "Error", mb_Ok)
else begin
SaveExitProc := ExitProc;
ExitProc := @LocalExitProc;
end;
end.
В программе:
////////////////////////////
private
{ Private declarations }
procedure WM_HideFormMSG (Var M : TMessage); message wm_FormHide_Event;
////////////////////////////
var
Form1: TForm1;
PDll:Pointer;
////////////////////////////
//Загрузка DLL
function Key_Hook(Code: integer; wParam: word; lParam: Longint) : Longint; stdcall; external "SendKey" name "Key_Hook";
////////////////////////////
procedure TForm1.WM_HideFormMSG (Var M : TMessage);
begin
MessageBox(Application.Handle,"Нажата клавиша ScrollLock","SpyClient",mb_OK);
end;
////////////////////////////
procedure TForm1.FormCreate(Sender: TObject);
begin
PDll:=@Key_Hook;
end;
← →
Виктор Щербаков (2002-01-25 13:46) [4]Разберись с Keystroke Message Flags.
Нужно исправить строку:
if (Code >= 0) and (lParam and $40000000 = 0)
Страницы: 1 вся ветка
Текущий архив: 2002.04.18;
Скачать: CL | DM;
Память: 0.45 MB
Время: 0.005 c