Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.01.02;
Скачать: 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 вся ветка

Текущий архив: 2005.01.02;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.054 c
1-1103289396
tytus
2004-12-17 16:16
2005.01.02
ShellTreeView


3-1102061807
SergP.
2004-12-03 11:16
2005.01.02
DBGridEh отловить оконч. редакт. ячейки, но до обработчика ошибок


4-1100578173
DelphiN!
2004-11-16 07:09
2005.01.02
Вывод формы, поверх fsStayOnTop формы


14-1102569513
Layner
2004-12-09 08:18
2005.01.02
ИТ-специалистов вытеснят новые технологии


3-1101976169
Sholoma
2004-12-02 11:29
2005.01.02
MySQL