Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.009 c
3-27315
Игорь Ч
2003-09-17 18:07
2003.10.09
Как при компиляции изменить имя исполняемого файла?


1-27596
Julia
2003-09-26 23:15
2003.10.09
компоненты


9-27297
com2003
2003-04-03 20:39
2003.10.09
Чисто геометрия


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


1-27433
Manfred
2003-09-28 13:58
2003.10.09
Круглый ProgressBar.





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