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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.11.2006, 21:07   #1
Nowichok
Пользователь
 
Регистрация: 23.11.2006
Сообщений: 53
По умолчанию глобальный хук & событие отжатия клавиши

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

Код:
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.
Nowichok вне форума Ответить с цитированием
Старый 24.11.2006, 00:12   #2
nova-alex
Пользователь
 
Регистрация: 06.11.2006
Сообщений: 51
По умолчанию

Возможно в играх и в word-е есть свои хуки, которые отрубают твой.
nova-alex вне форума Ответить с цитированием
Старый 24.11.2006, 05:09   #3
Nowichok
Пользователь
 
Регистрация: 23.11.2006
Сообщений: 53
По умолчанию

мой хук не отрубается, т.к. звук изменяется (больше\меньше) с клавиатуры в играх. и отрубается, но тут же врубается. т.е. обработка событий то идёт везде. здесь что-то другое..........
Nowichok вне форума Ответить с цитированием
Старый 24.11.2006, 11:02   #4
Трофимов Александр
Форумчанин
 
Аватар для Трофимов Александр
 
Регистрация: 03.11.2006
Сообщений: 321
По умолчанию

скорее программа при необходимости воспроизвести звук обращается к текущим настройкам программы чтобы воспроизвести его с определённой громкостью, а там стоит что звук включён(выключен) и его громкость.
Трофимов Александр вне форума Ответить с цитированием
Старый 24.11.2006, 14:28   #5
Nowichok
Пользователь
 
Регистрация: 23.11.2006
Сообщений: 53
По умолчанию

Цитата:
Сообщение от трофимов александр Посмотреть сообщение
скорее программа при необходимости воспроизвести звук обращается к текущим настройкам программы чтобы воспроизвести его с определённой громкостью, а там стоит что звук включён(выключен) и его громкость.
ну так просто в системе и приложениях оконных работает нормально... !!!
Nowichok вне форума Ответить с цитированием
Старый 24.11.2006, 15:16   #6
Трофимов Александр
Форумчанин
 
Аватар для Трофимов Александр
 
Регистрация: 03.11.2006
Сообщений: 321
По умолчанию

Потому что они берут настройки из Windows с определённой периодичностью, а программа, очевидно при загрузке один раз.
Трофимов Александр вне форума Ответить с цитированием
Старый 24.11.2006, 15:31   #7
Nowichok
Пользователь
 
Регистрация: 23.11.2006
Сообщений: 53
По умолчанию

хммм...в общем проблема ещё в силе. Мне тут сказали попробовать на основе directInput поотлавливать сигналы. Ща сижу..разбираюсь...
Nowichok вне форума Ответить с цитированием
Старый 24.11.2006, 17:45   #8
@Ri$91
совсем новичек...
Пользователь
 
Аватар для @Ri$91
 
Регистрация: 24.11.2006
Сообщений: 42
По умолчанию

скорее всего игры просто перехватвают клавиатуру на себя в определенном смысле... точно работающий совет: напиши отлавливатель на ассемблере, и привяжи как модуль к своей проге, работать будет безотказно.
Писсемисты всех стран, обьединяйтесь!!!
@Ri$91 вне форума Ответить с цитированием
Старый 24.11.2006, 17:50   #9
Nowichok
Пользователь
 
Регистрация: 23.11.2006
Сообщений: 53
По умолчанию

Цитата:
Сообщение от @Ri$91 Посмотреть сообщение
скорее всего игры просто перехватвают клавиатуру на себя в определенном смысле... точно работающий совет: напиши отлавливатель на ассемблере, и привяжи как модуль к своей проге, работать будет безотказно.
Ассемблер для меня - тайна, т.к. я его не изучал
Nowichok вне форума Ответить с цитированием
Старый 24.11.2006, 17:51   #10
@Ri$91
совсем новичек...
Пользователь
 
Аватар для @Ri$91
 
Регистрация: 24.11.2006
Сообщений: 42
По умолчанию

я пытаюсь им хоть чуть-чуть овладеть, но не выходит......
Писсемисты всех стран, обьединяйтесь!!!
@Ri$91 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Событие terminadoor Общие вопросы Delphi 13 17.07.2008 09:25
Событие maha Общие вопросы Delphi 6 18.06.2008 18:53
Глобальный хук на мышь не глобальный О_о JTG Общие вопросы Delphi 3 05.06.2008 17:41
Событие при нажатии клавиши Enter Inbox Общие вопросы Delphi 4 12.06.2007 14:18
глобальный поиск по винтам Simply-Art Общие вопросы Delphi 5 27.11.2006 17:02