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

Тема в разделе "Delphi - Система", создана пользователем Nowichok, 23 ноя 2006.

  1. Nowichok

    Nowichok Гость

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

    Код (Text):
    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.
     
  2. morpheus

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
  3. Kmet

    Kmet Well-Known Member

    Регистрация:
    25 май 2006
    Сообщения:
    1.017
    Симпатии:
    1
    Для: Morpheus
    Не совсем понятно откуда взялся такой вывод.

    Для: Nowichok
    Во многих играх для получения данный с клавиатуры и мышки используется DirectInput.
     
  4. Nowichok

    Nowichok Гость

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

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

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    Для: Kmet
    Для: Nowichok


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

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

    Попробую исчправица << DirectInput >> :)
     
  6. Nowichok

    Nowichok Гость

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

    Nowichok Гость

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

    Nowichok Гость

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

    Nowichok Гость

    Ох, решил проблему элементарным добавление b:boolean, которое отслеживает состояние клавиши до нажатия и после. Просто хотелось решить по-другому это ....
     
Загрузка...
Похожие Темы - Глобальный хук событие
  1. lmike
    Ответов:
    10
    Просмотров:
    1.050
  2. phantom76
    Ответов:
    8
    Просмотров:
    3.211
  3. Gor
    Ответов:
    3
    Просмотров:
    3.010
  4. alekssgor
    Ответов:
    0
    Просмотров:
    1.227

Поделиться этой страницей