Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.12.2010, 08:34   #1
Slippy
Пользователь
 
Аватар для Slippy
 
Регистрация: 29.12.2010
Сообщений: 55
По умолчанию Глобальный хук на нажатие клавиши

Всем привет и с наступающим

Хочу написать небольшую прогу, которая будет глобально отлавливать нажатие клавиши PrintScreen и выполнять определённые действия по этому событию (например, сразу сохранять скрин в указанной папке).

Собственно, погуглив нашёл много примеров создания хуков на клаву. По аналогии с одним из них написал следущее:

Код:
library HookDll;

uses SysUtils, Classes, Windows;

var CurrentHook: HHook;

function GlobalKeyBoardHook(code: integer; wParam: word; lParam: longword): longword; stdcall;
begin
  if ((lParam and KF_UP) = 0) and (wParam = VK_SNAPSHOT) then SysUtils.Beep;
  GlobalKeyBoardHook := 0;
end;

procedure SetHookHandle(HookHandle: HHook); stdcall;
begin
  CurrentHook := HookHandle;
end;

exports GlobalKeyBoardHook, SetHookHandle;

begin
end.
Соответственно в другом проекте подключаю dll, подзываю функции. Всё вроде бы работает - комп пищит по нажатию PrintScreen. Но несколько раз, даже при быстром нажатии. Мне же нужна реакция на нажатие только 1 раз. Насколько я понимаю, строка:
if ((lParam and KF_UP) = 0)
проверяет, не зажата ли клавиша.
Но что-то не могу понять, как именно она это делает.
Думаю, если вместо этого поставить проверку на отпускание - событие будет как раз отлавливаться 1 раз.

Подскажите, пожалуйста, как это сделать? Ну и, если не сложно, объясните в чём принцип этого выражения. Что-то не доходит.
Теория – это когда все известно, но ничего не работает. Практика – это когда все работает, но никто не знает почему. Мы объединяем теорию и практику: ничего не работает и никто не знает почему ©
Slippy вне форума Ответить с цитированием
Старый 31.12.2010, 19:06   #2
asmodey1
Подтвердите свой е-майл
 
Регистрация: 19.12.2010
Сообщений: 808
По умолчанию

Цитата:
погуглив немного
А теперь взглянуть вниз, в "Похожие темы" - не судьба ?
asmodey1 вне форума Ответить с цитированием
Старый 31.12.2010, 19:30   #3
Slippy
Пользователь
 
Аватар для Slippy
 
Регистрация: 29.12.2010
Сообщений: 55
По умолчанию

Спасибо, смотрел. Там немного не то, что мне нужно.
Но в принципе я уже нашёл описание хуков с подробными комментариями в книге Фленова "Делфи глазами хакера".
Тему можно закрыть
Теория – это когда все известно, но ничего не работает. Практика – это когда все работает, но никто не знает почему. Мы объединяем теорию и практику: ничего не работает и никто не знает почему ©
Slippy вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Глобальный хук клавиатуры. Horus92 Win Api 2 14.10.2010 22:51
Глобальный хук Умед Общие вопросы Delphi 1 02.08.2010 11:04
Глобальный хук на клаву rem37 Win Api 7 03.05.2009 01:25
Глобальный хук на мышь не глобальный О_о JTG Общие вопросы Delphi 3 05.06.2008 17:41
глобальный хук & событие отжатия клавиши Nowichok Общие вопросы Delphi 9 24.11.2006 17:51