Вниз
Скачать: CL | DM;

Каким образом можно сбросить буфер нажатых клавиш   Найти похожие ветки 

← →
aleshap   (2004-12-16 11:10) [0]

Добрый день!

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

Спасибо


← →
Digitman ©   (2004-12-16 11:19) [1]


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


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


← →
aleshap   (2004-12-16 11:27) [2]

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


← →
DiamondShark ©   (2004-12-16 11:30) [3]

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


← →
Digitman ©   (2004-12-16 11:33) [4]


> aleshap   (16.12.04 11:27) [2]


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


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


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


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


← →
aleshap   (2004-12-16 11:36) [5]

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


← →
Суслик ©   (2004-12-16 11:38) [6]

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


← →
DiamondShark ©   (2004-12-16 11:39) [7]


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

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
  );

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


← →
Digitman ©   (2004-12-16 11:40) [8]


> aleshap   (16.12.04 11:10)  


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

Keyboard Input Model

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

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

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


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

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


← →
Суслик ©   (2004-12-16 11:42) [10]


>  [9] aleshap   (16.12.04 11:40)


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

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


← →
Digitman ©   (2004-12-16 11:46) [11]


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


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


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


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


← →
aleshap   (2004-12-16 11:48) [12]

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


← →
DiamondShark ©   (2004-12-16 11:48) [13]

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


← →
Digitman ©   (2004-12-16 11:50) [14]


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


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


← →
Суслик ©   (2004-12-16 11:51) [15]


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

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


← →
aleshap   (2004-12-16 12:03) [16]

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

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

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


← →
Digitman ©   (2004-12-16 12:47) [17]


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


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



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.49 MB
Время: 0.02 c
14-1102573065
MrCorp1
2004-12-09 09:17
2005.01.02
Интернет по e-mail


1-1103282078
Serge
2004-12-17 14:14
2005.01.02
escape sequences in Delphi and C++Builder???


11-1083160561
Дас Виндовс 45
2004-04-28 17:56
2005.01.02
Как проиграть midi-файл?


14-1102531328
begin...end
2004-12-08 21:42
2005.01.02
Выбор монитора


14-1103004910
calm
2004-12-14 09:15
2005.01.02
Оцифровка видео. Что нужно?




   Наверх