Форум: "Система";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.18;
Скачать: [xml.tar.bz2];




Вниз

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)




Форум: "Система";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.18;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.72 MB
Время: 0.02 c
1-57772           Dmitry Klykoff        2002-04-05 10:21  2002.04.18  
Кодирование .exe


1-57813           SeF                   2002-04-02 02:57  2002.04.18  
Getclassname


1-57711           [MC]NuClon            2002-04-06 14:48  2002.04.18  
SMTP


1-57676           daos                  2002-04-07 15:08  2002.04.18  
Подскажите где есть РАБОТАЮЩИЕ компоненты для шифрования!


7-57895           VS                    2002-01-23 06:51  2002.04.18  
Как вызвать свойства конкретного принтера