Конференция "WinAPI" » Как определить момент манипуляции устройством ввода? [D6, WinXP]
 
  • Alexei © (15.08.09 01:03) [0]
    Как в целом для приложения (а не для конкретной формы) программно определить, что пользователь
    1) нажал клавишу (любую) на клавиатуре;
    2) сделал манипуляцию мышью (нажал левую / правую кнопку мыши или покрутил колесом)?
  • TIF © (15.08.09 02:04) [1]
    Очень просто :)
    Нужно просто ловить сообщения - messages, посылаемые системой

    1) Читаем MSDN и собираем нужные нам сообщения:
    WM_KEYDOWN:
    http://msdn.microsoft.com/en-us/library/ms646280(VS.85).aspx
    WM_MOUSEWHEEL:
    http://msdn.microsoft.com/en-us/library/ms645617(VS.85).aspx
    и так далее

    2) Размещаем на форме компонент TApplicationEvents, с помощью которого будем ловить сообщения, посылаемые нашему application
    3) В событии OnMessage у него прописываем нужный код, который должен выполняться в каждом конкретном случае, например:
    case Msg.message of
        WM_KEYDOWN: ListBox1.Items.Add('Нажата клавиша');
          WM_KEYUP: ListBox1.Items.Add('Отжата клавиша');
     WM_SYSKEYDOWN: ListBox1.Items.Add('Нажата системная клавиша');
       WM_SYSKEYUP: ListBox1.Items.Add('Отжата системная клавиша');
     и так далее :)
    end;



    PS: полный список сообщений, которые нужны в данном случае
    WM_KEYDOWN
    WM_KEYUP
    WM_SYSKEYDOWN
    WM_SYSKEYUP
    WM_LBUTTONDOWN
    WM_LBUTTONUP
    WM_RBUTTONDOWN
    WM_RBUTTONUP
    WM_MOUSEWHEEL

    Подробности - в MSDN (см. пункт 1), хотя и по их названиям можно запросто понять, к каким событиям они привязаны
 
Конференция "WinAPI" » Как определить момент манипуляции устройством ввода? [D6, WinXP]
Есть новые Нет новых   [134434   +27][b:0][p:0.001]