Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения
KANSoftWare

Очистить очередь сообщений клавиатуры и мышки

Delphi , ОС и Железо , Клавиши

Очистить очередь сообщений клавиатуры и мышки

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

procedure EmptyKeyQueue;
 var
   Msg: TMsg;
 begin
   while PeekMessage(Msg, 0, WM_KEYFIRST, WM_KEYLAST,
     PM_REMOVE or PM_NOYIELD) do;
 end;

 procedure EmptyMouseQueue;
 var
   Msg: TMsg;
 begin
   while PeekMessage(Msg, 0, WM_MOUSEFIRST, WM_MOUSELAST,
     PM_REMOVE or PM_NOYIELD) do;
 end;

Here's the translation of the text into Russian:

Код на Delphi: очистка очереди клавиатуры и мыши

Этот код предназначен для очистки очередей сообщений клавиатуры и мыши. Пусть разберемся:

EmptyKeyQueue

  • Процедура EmptyKeyQueue использует цикл для перебора всех сообщений в очереди клавиатуры (WM_KEYFIRST до WM_KEYLAST).
  • Используется функция PeekMessage, чтобы извлечь следующее сообщение из очереди без удаления его из нее.
  • Флаг PM_REMOVE указывает, что сообщение должно быть удалено из очереди после обработки.
  • Флаг PM_NOYIELD означает, что вызывающий поток не будет возвращать контроль другим потокам при обработке сообщений.

EmptyMouseQueue

  • Аналогично EmptyKeyQueue, EmptyMouseQueue использует цикл для перебора всех сообщений в очереди мыши (WM_MOUSEFIRST до WM_MOUSELAST).
  • Остальная часть кода идентична EmptyKeyQueue.

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

Вот альтернативное решение с более современным подходом:

Вместо использования PeekMessage с циклом можно использовать функцию GetQueueStatus, чтобы извлечь текущее состояние очереди, а затем вызвать DispatchMessages, пока в очереди не останется сообщений. Этот подход более эффективен и проще для чтения:

procedure EmptyKeyQueue;
begin
  while GetQueueStatus(QS_KEYMESSAGES) > 0 do
    Application.ProcessMessages;
end;

procedure EmptyMouseQueue;
begin
  while GetQueueStatus(QS_MOUSEMESSAGES) > 0 do
    Application.ProcessMessages;
end;

В этом коде GetQueueStatus возвращает количество сообщений в очереди. Пока в очереди есть сообщения, вызывается Application.ProcessMessages, чтобы их обработать и очистить очередь.

В статье описаны процедуры для очистки очереди сообщений клавиатуры и мышки в программировании на Delphi.


Комментарии и вопросы


Ваше мнение или вопрос к статье в виде простого текста (Tag <a href=... Disabled). Все комментарии модерируются, модератор оставляет за собой право удалить непонравившейся ему комментарий.

заголовок

e-mail

Ваше имя

Сообщение

Введите код




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Клавиши ::


реклама



©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru Rambler's Top100

Время компиляции файла: 2024-05-19 17:53:24
2024-05-19 19:15:27/0.0071010589599609/2