Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.013 c
3-27352
DelphiNew
2003-09-19 17:17
2003.10.09
Проблема с интербейз


3-27365
Dark Elf
2003-09-19 13:09
2003.10.09
Документация по ADO SQL


8-27620
adam
2003-06-11 07:07
2003.10.09
mp3.... Как???


4-27762
^^^Dragon^^^
2003-08-05 22:42
2003.10.09
Как отследить запуск другого ПОЛНОЭКРАННОГО приложения?


14-27710
Санёк
2003-09-21 19:08
2003.10.09
Добрый день мастера!




   Наверх