Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Каким образом можно сбросить буфер нажатых клавиш [D7, Win95/98, WinME, NT4, Win2k, WinXP]


aleshap ©   (2004-12-16 11:10:00) 

Добрый день!

Каким образом можно сбросить буфер нажатых клавиш или удалить все сообщения из очереди, относящиеся к нажатию клавиш на клавиатуре.

Спасибо


Digitman   (2004-12-16 12:47:00) [1]


> игнорировать нажатии, пока клиент находиться в ожидании
> или обработке сообщения от сервера


почему ты ограничиваешь юзера-клиента в праве, например, завершить работу приложения ДО того как будет завершена транзакция ?


aleshap   (2004-12-16 12:03:00) [2]

Все спасибо! ПОМОГЛО....

DiamondShark ©
А зачем их как-то специально удалять?
Ну не обрабатываются, так и шут с ними...

В том то дело - что они то и обрабатываются, но не вовремя. Т.к. программа является клиентом - то возникла необходимость игнорировать нажатии, пока клиент находиться в ожидании или обработке сообщения от сервера по сетке 1,5кбит/c


Суслик   (2004-12-16 11:51:00) [3]


>  [14] Digitman ©   (16.12.04 11:50)

Да, верно.
Забыл.


Digitman   (2004-12-16 11:50:00) [4]


> Суслик ©   (16.12.04 11:42) [10]
> Как правило?
> А бывает иначе?


бывает.
см. AttachThreadInput()


DiamondShark   (2004-12-16 11:48:00) [5]

А зачем их как-то специально удалять?
Ну не обрабатываются, так и шут с ними...


aleshap   (2004-12-16 11:48:00) [6]

Да конечно ответ [8] вполне развернут, спасибо - видимо это то что мне нужно.


Digitman   (2004-12-16 11:46:00) [7]


> Как правило Message относящиеся к клавиатуре и другому приложению
> не обрабатываются данным приложением


а причем здесь тогда буфер клавиатуры ? он единый и общий для всехприложений в системе


> мне необходимо удалить Message относящиеся к клавиатуре
> и к моему приложению в данный момент времени


для этого в каждомтрэде (потенциально создающем окна, потенциально получающие фокус ввода) твоего тек.процесса необходимо выполнить код из [8]


Суслик   (2004-12-16 11:42:00) [8]


>  [9] aleshap   (16.12.04 11:40)


> Как правило Message относящиеся к клавиатуре и другому приложению
> не обрабатываются данным приложением

Как правило?
А бывает иначе?
Тебе в общем в [8] ответ был дан достаточно полный.


aleshap   (2004-12-16 11:40:00) [9]

Digitman>
ты не вправе трогать буфер клавиатуры, ибо этот ресурс раздеяемый между всеми процессами в системе - клавиатурный ввод в данный момент времени м.б. сфокусирован на окно, не принадлежащее твоему процессу
Как правилоMessage относящиеся к клавиатуре и другому приложению не обрабатываются данным приложением, поэтому мне необходимо удалить Message относящиеся к клавиатуре и к моему приложению в данный момент времени.


Digitman   (2004-12-16 11:40:00) [10]


> aleshap   (16.12.04 11:10)  


посмотри станд.справку по теме

Keyboard Input Model

там есть иллюстрация сквозного механизма работы клавиатурного ввода в системе

примерный фрагмент кода, иллюстрирующий удаление необработанных сообщений клав.ввода из очереди текущего трэда

var
 Msg: TMsg;
..
while PeekMessage(Msg, 0, WM_KEYFIRST, WM_KEYLAST, PM_REMOVE) do;


DiamondShark   (2004-12-16 11:39:00) [11]


> при выборе клавиатурных сообщения, будут поступать и все
> остальные

BOOL PeekMessage(

   LPMSG lpMsg, // pointer to structure for message
   HWND hWnd, // handle to window
   UINT wMsgFilterMin, // first message
   UINT wMsgFilterMax, // last message
   UINT wRemoveMsg  // removal flags
  );

Столько много параметров у такой простой функции явно неспроста...


Суслик   (2004-12-16 11:38:00) [12]

может peekmessage с параметром PM_REMOVE попробовать?


aleshap   (2004-12-16 11:36:00) [13]

Логично, но при выборе клавиатурных сообщения, будут поступать и все остальные, а мне необходимо просто их удалить, не выполняя все сообщения.


Digitman   (2004-12-16 11:33:00) [14]


> aleshap   (16.12.04 11:27) [2]


> забудьте о очереди (раз непонятно)


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


> сбросить .. буфер нажатых клавиш


ты не вправе трогать буфер клавиатуры, ибо этот ресурс раздеяемый между всеми процессами в системе - клавиатурный ввод в данный момент времени м.б. сфокусирован на окно, не принадлежащее твоему процессу


DiamondShark   (2004-12-16 11:30:00) [15]

Видимо, выбрав все клавиатурные сообщения.


aleshap   (2004-12-16 11:27:00) [16]

Ладно - забудьте о очереди (раз непонятно)
Каким образом можно сбросить (очистить) буфер нажатых клавиш


Digitman   (2004-12-16 11:19:00) [17]


> удалить все сообщения из очереди


из чьейочереди ?


Наверх

Титульная страница Поиск, карта сайта Написать письмо