Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.47 MB
Время: 0.014 c
3-57653
Sergey_R
2002-03-26 18:19
2002.04.18
Ничего не понимаю...В SQLExplorer работает, напрямую из...


4-57927
alexey1
2002-02-13 04:09
2002.04.18
icons


1-57731
Dan_
2002-04-08 13:49
2002.04.18
Проблема с TComboBox


1-57755
LLong
2002-04-04 20:41
2002.04.18
Проблема с MDI


3-57623
XanderMan
2002-03-27 20:24
2002.04.18
Помогите с UDF