Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.10.09;
Скачать: CL | DM;

Вниз

Hook на клавиши   Найти похожие ветки 

 
Checist [root]   (2003-07-25 02:30) [0]

Как мне отследить какая комбинация клавиш была нажата на клавиатуре и какое окно (окно какого процесса) сейчас активно?


 
3APA3A ©   (2003-07-25 02:46) [1]

1) Hook на клавиатуру.
2) GetForegroundWindow. GetWindowsThreadProcessId


 
Checist [root]   (2003-07-25 02:49) [2]

-> 1) Я в WinApi ноль какой именно Hook и куда вставлять данные соурсы? Мне нужно чтобы прога все время отслешивала нажатие клавиш!


 
3APA3A ©   (2003-07-25 03:29) [3]

А я в машиностроении ноль и мне нужно из самоката сделать подводную лодку. Гаечный ключ какого размера мне использовать? =)

Теперь по делу:
1) создаешь dll
2) В ней функция с типом вызова stdcall
3) В этой функции - обработчик прихода мессаги от ОС
4) В твоей программе - загрузка dll и вызов SetWindowsHookEx
c dll-handle, типом hook и адресом твоей dll-процедуры...

5) Потираешь руки и вопишь: "Она РАБОТАЕТ!!!"
Это основы, обрати внимание, что пункт 5 следует строго после 4-х первых... =))))


 
Ghost ©   (2003-07-26 08:05) [4]

> 3APA3A

:)

>Checist [root]

Тебе ещё рано такими вещами заниматься !


 
Calm ©   (2003-07-26 16:22) [5]

в FAQ этого сайта ищешь по слову "hook" и... о фантастика, кто бы мог подумать!!! - находим пример хука на клавиатуру.

Далее, ищем в Yandex по словам "Delphi hook, пример" и находим несколько вполне приличных примеров хуков.


 
Shluz ©   (2003-07-26 19:21) [6]


var HookHandle: HHOOK;
...
function KeyboardProc (nCode:integer; wParam, LPARAM:Longint):Longint;stdcall;
var f: textfile;
begin
if nCode < 0 then
Result := CallNextHookEx(HookHandle,nCode, wParam, LPARAM)
else
( WH_Keyboard, @KeyboardProc, hinstance, 0)
var HookHandle: HHOOK;
...
function KeyboardProc (nCode:integer; wParam, LPARAM:Longint):Longint;stdcall;
var f: textfile;
begin
if nCode < 0 then
Result := CallNextHookEx(HookHandle,nCode, wParam, LPARAM)
else
Result := 0;
// переменная wParam хранит значение нажатой клавиши

>3APA3A ©
уж можно вопить???
end;

function SetHook: boolean; stdcall;
begin
HookHandle := SetWindowsHookEx(WH_Keyboard, @KeyboardProc, hinstance, 0);
Result := HookHandle <> 0
end;
function RemoveHook: boolean; stdcall;
begin
Result := UnhookWindowsHookEx(HookHandle)
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
if not sethook then showmessage("Не удалось установить ловушку...");
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if not Removehook then showmessage("Не удалось снять ловушку...");
end;

..вот вобщем-то мой вариант
// делал хук непосредственно в программе, хотя в dll переделать нетрудно (хотя для WH_Keyboard это не обязательно)


 
notDelphy   (2003-08-04 17:02) [7]

Народ, все это хорошо, и очень даже понятно, но вот кто подскажет, как теперь из function KeyboardProc послать сообщение приложению, которое запустило хук. Дело в том, что когда это приложение свернуто, то оно не реагирует ни на одно из SendMessage, или др. посылок из хук-функции...
Плиз, хелп!!!



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

Текущий архив: 2003.10.09;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.015 c
14-27668
Dark Elf
2003-09-22 15:59
2003.10.09
HtmlHelp


3-27354
dtm
2003-09-18 13:51
2003.10.09
Embedded FireBird


14-27681
саша2
2003-09-23 09:43
2003.10.09
наводка


3-27341
Нитолай
2003-09-19 18:08
2003.10.09
Date


7-27758
Константин
2003-07-23 22:31
2003.10.09
Как изменить разрешение экрана?