• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Глобальный хук & событие отжатия клавиши

  • Автор темы Nowichok
  • Дата начала
N

Nowichok

Пишу программу, которая отлавливает ВСЕ нажатия клавиш в системе. Пишется она для того чтобы регулировать громкость с клавиатуры (клавиатура стандратная, блин :ph34r: ). Привожу часть кода из библиотеки :

Код:
function Key_Hook(Code: integer; wParam: word; lParam: DWord): Longint;stdcall; export;
var KeyState:integer;
begin
If Code>=0 then
begin
if HiWord(GetKeyState(VK_MENU)) <> 0 then
begin
if HiWord(GetKeyState(VK_CONTROL)) <> 0 then
begin
case wParam of
VK_ADD:VolumeHigh; //moya function
VK_SUBTRACT:VolumeLow; //moya function
VK_MULTIPLY:
begin
KeyState:=GetKeyState(wParam);
if HiWord(KeyState)=0 then // {KeyState>=0 toze kak variant}
VolumeOnOff; //moya function
end;
end;
end;
end;
end;
result:=0;
end;

так вот вроде бы всё работает. Зажимаю Alt+CTRL+Num* - звук отрубается. Ещё раз нажимаю - врубается.
НО этого не происходит в играх и в word'е (может и ещё где ,просто тут замечено). Там ,как я ппдодозреваю, происходит лишняя обработка (нажал клавишу + отпустил клавишу)...в итогу звук отрубается и тут же врубается.

Как мне сделать, чтобы я мог контролировать отжатие клавиши и в этих случаях ??
А то уже 4-й день бьюсь над этим..что только не пробовал.
Если чтО ,использую хук WH_KEYBOARD.
 
M

morpheus

Дык, потому что он(хук) не глобальный


 

Kmet

Well-known member
25.05.2006
904
8
BIT
0
Для: Morpheus
Дык, потому что он(хук) не глобальный
Не совсем понятно откуда взялся такой вывод.

Для: Nowichok
НО этого не происходит в играх и в word'е (может и ещё где ,просто тут замечено).
Во многих играх для получения данный с клавиатуры и мышки используется DirectInput.
 
N

Nowichok

Хук, повторяю, ГЛОБАЛЬНЫЙ ! Не знаю, почему у вас сложилось обратное мнение....и об установке хуков я осведомлён (но всё равно thx за ссылки, прочитал..но ничего нового :( ) . В играх звук изменяется (больше\меньше), но при попытке отрубить его происходит отключение...и тут же включение звука. И я же в играх изменяю не громкость звука в нстройках игры, а громкость в самой системе (Volume Control)-> Wave). Как изменять Volume control там - не в курсе.

а что за DirectInput?? Дайте ссылкИ, плз, что это такое и как его обрабатывать ?? !!
 
M

morpheus

Для: Kmet
Для: Nowichok


Прошу сорей... шота мне сегодня повылазило , не видел "Глобальный хук & ...." :(

пятницо наверное

Попробую исчправица :)
 
N

Nowichok

Thanks за ссылку. Ща сижу, разбираюсь. Надеюсь, это поможет. А то уже надоело - вроде программа простенькая - а столько проблем
 
N

Nowichok

Появился вопрос :
Обрабатывать клавиатурный ввод методом DirectInput нужно в dll-ке ??? или тут можно вообще без dll-файла обойтись ?
 
N

Nowichok

И ещё :
как через DirectInput узнатЬ, что клавиша была отпущена ?? То, что она нажата - узнать можно, то что отпущена - тоже можно. А вот как насчёт того, что клавиша БЫЛА отпущена ?? Потому что без этого моя проблема остаётся в силе
 
N

Nowichok

Ох, решил проблему элементарным добавление b:boolean, которое отслеживает состояние клавиши до нажатия и после. Просто хотелось решить по-другому это ....
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!