Форум: "WinAPI";
Текущий архив: 2003.10.09;
Скачать: [xml.tar.bz2];
Вниз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 вся ветка
Форум: "WinAPI";
Текущий архив: 2003.10.09;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.01 c