![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Каким образом можно сбросить буфер нажатых клавиш [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]
> удалить все сообщения из очереди
из чьейочереди ?