• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

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

  • Автор темы 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, которое отслеживает состояние клавиши до нажатия и после. Просто хотелось решить по-другому это ....
 
Мы в соцсетях:

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