Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 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)




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

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

Наверх





Память: 0.45 MB
Время: 0.005 c
1-57813
SeF
2002-04-02 02:57
2002.04.18
Getclassname


4-57924
alexey1
2002-02-13 04:43
2002.04.18
open/save dialogs


6-57826
Stanislav
2002-02-06 13:17
2002.04.18
Изменение настроек WebBrowser


1-57762
andreik
2002-04-05 15:43
2002.04.18
Ширина делений в ProgressBar


1-57735
Дмитрий Д.
2002-04-04 10:39
2002.04.18
Дерево каталогов с возможностью выборки





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