forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Delphi (http://forum.boolean.name/forumdisplay.php?f=66)
-   -   Резидентный перехватчик клавиатуры (http://forum.boolean.name/showthread.php?t=4042)

SubZer0 30.07.2007 23:29

Резидентный перехватчик клавиатуры
 
Приветствую всех!

проблема довольно интересная.. точнее ее реализация...

реально ли из делфи (точнее из freepascal, а еще точнее из lazarus, впринципе разница не большая, мне бы принцип узнать...) придумать резидентный обработчик клавиатуры в виндовс...

если да, то буду рад ссылкой на подобную статью...

:)

ViNT 31.07.2007 01:41

Re: Резидентный перехватчик клавиатуры
 
Можно сделать DLL с ловушкой. Поищи статью по клавиатурным шпионам - многие по такому принципу устроены.

WaReZ_MEN 31.07.2007 02:07

Re: Резидентный перехватчик клавиатуры
 
Очень даже реально можно обоитись и без DLL правда это будет геморно све кнопки описывать :). Статеи полно так что поищи загляни на forum.vingrad.ru или DelphiWorld. Если будут вопросы пиши обязательно помогу.

SBJoker 31.07.2007 02:09

Re: Резидентный перехватчик клавиатуры
 
Declare Function GetKeyState Lib "user32" Alias "GetKeyState" (ByVal nVirtKey As Long) As Integer из WinApi32 вам поможет знать всё о нажатых кнопках... а поиск активного окна знать куда это вводитсо и несваливать всё в кучу.

WaReZ_MEN 31.07.2007 02:18

Re: Резидентный перехватчик клавиатуры
 
Можно через
Цитата:

TForm1 = class(TForm)
.......
Private
procedure WMHotkey( var msg: TWMHotkey ); message WM_HOTKEY;
End;
procedure Form1.FormCreate(Sender: TObject);
Begin
RegisterHotkey(Handle, 1, MOD_CONTROL, ord('W'));
RegisterHotkey(Handle, 2, MOD_CONTROL, ord('P'));
end;
....
procedure TForm1.WMHotkey(var msg: TWMHotkey);
begin
if msg.hotkey = 1 then
begin
ShowWindow("press W");
end;
if msg.hotkey = 2 then
begin
ShowWindow("press P");
end;
end;
....
это канечно все кнопки описывать но зато не нужно искать окно в катором ты их нажал...и dll тож не нужно... Для клавиатурного шпиона способ хреновый а вот для быстрых клавиш в сымый раз :) + Никаких проблем с Касперским.

SubZer0 31.07.2007 03:27

Re: Резидентный перехватчик клавиатуры
 
Вложений: 2
Я больше смотрю в сторону SetWindowsHookEx


вроде после прочтения кучи гемора в нете, потихоньку начинаю въезжать в структуру всего дела...

нашел, вроде как, рабочий пример для делфи (не тестил, не знаю)... см. аттач!

и у меня есть пара вопросов по нему:


Цитата:

@hook:= nil; // инициализируем переменную hook
странный какойто метод инициализации... ктонить объяснит?

как проверить создан ли уже обработчик?

ну и как через winapi получить дескриптор окна и текстбокса в котором находится на данный момент ввода курсор?

впринципе вроде пока всё...

заранее спасибо!

ViNT 31.07.2007 15:04

Re: Резидентный перехватчик клавиатуры
 
Есть одна книга, "Программирование в Delphi глазами хакера"-там про ловушки очень хорошо расписано, правда весит 4 метра...
Ссылка в посте №10.

Chrono Syndrome 31.07.2007 18:14

Re: Резидентный перехватчик клавиатуры
 
Цитата:

Сообщение от SBJoker
Declare Function GetKeyState Lib "user32" Alias "GetKeyState" (ByVal nVirtKey As Long) As Integer из WinApi32 вам поможет знать всё о нажатых кнопках... а поиск активного окна знать куда это вводитсо и несваливать всё в кучу.

Может лучше GetAsyncKeyState ?

Цитата:

ну и как через winapi получить дескриптор окна и текстбокса в котором находится на данный момент ввода курсор?
AFAIK эта информация хуками не фиксируется, но можно, вроде бы, просто исходить из того факта, что ввод возможен только в ForegroundWindow...

SBJoker 31.07.2007 18:52

Re: Резидентный перехватчик клавиатуры
 
Цитата:

Сообщение от Chrono Syndrome
Может лучше GetAsyncKeyState ?

да несомнено лучше :)

SubZer0 01.08.2007 00:29

Re: Резидентный перехватчик клавиатуры
 
2 ViNT

перелил книжку се на хост... отсюжа можешь удалить, а то у нас ограничение на аттачи...

Скрытый текст (вы должны войти под своим логином или зарегистрироваться и иметь 5 сообщение(ий)):
У вас нет прав, чтобы видеть скрытый текст, содержащийся здесь.

Sotis 22.08.2007 17:32

Re: Резидентный перехватчик клавиатуры
 
Спасибо за книжку а то моя копия этого файлика сгинула на флехе во время глюка, а книжка срочно понадобилась.

P.s. Я тоже занимаюсь реализацией клавиатурного шпиона. тока неполучается пока... :(


Часовой пояс GMT +4, время: 16:37.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot