powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Очистка буфера клавиатуры
5 сообщений из 5, страница 1 из 1
Очистка буфера клавиатуры
    #33111871
raven1976
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пишу на С++, VS.Net, Win32 API

Решил в дополнение к пунктам меню, которые отвечают за выполнение операций
открытия, создание нового, сохранения файлов... добавить возможность делать это с помощью Ctrl+O, Ctrl+N, Ctrl+S...

Для этого использую SetWindowsHookEx() и процедуру обработки перехваченных нажатий клавиш

Вот кусок из процедуры для сохранения

case 0x53: //клавиша S
{
//проверяем нажата ли в этот момент Ctrl
if((GetAsyncKeyState(VK_CONTROL) & 0x8000))
//если да то посылаем сообщение
SendMessage(g_hWnd,
WM_COMMAND,
(WPARAM) IDM_FILE_SAVE,
(LPARAM) 0);
}
break;

Проблема в том, что на главном окне программы есть Edit контрол который должен получать фокус ввода сразу после выполнения вышеперечисленных действий и вот, после выполнения например, сохранения, (Ctrl+S) в этом контроле появляется буква S (ну и соответственно N или O при других действиях)
Я так понимаю что после перехвата сообщения и выполнения необходимых мне действий нужно очистить буфер клавиатуры, но что-то не могу найти соответствующую Win32 API ф-цию
Может кто нибудь помочь?
...
Рейтинг: 0 / 0
Очистка буфера клавиатуры
    #33111907
Ой Вэй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А не проще ли для решения исходной задачи использовать акселераторы?
...
Рейтинг: 0 / 0
Очистка буфера клавиатуры
    #33112126
raven1976
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ой ВэйА не проще ли для решения исходной задачи использовать акселераторы?

да с акселераторами у меня какие-то непонятные глюки
буквально через раз не срабатывают, правда помогает переключение на какое-нибудь другое окно другой программы и возврат назад, но ведь это же не дело
я уже и не знаю где копать, потому и решил использовать Hook
...
Рейтинг: 0 / 0
Очистка буфера клавиатуры
    #33112442
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это ж как надо программку заглючить, чтобы акселераторы не вообще не работали, а через раз !
Там же делать нечего, вставляешь
LoadAccellerators() до цикла обработки сообщений, и в него - TranslateMessage() до DispatchMessage().
...
Рейтинг: 0 / 0
Очистка буфера клавиатуры
    #33112496
raven1976
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivЭто ж как надо программку заглючить, чтобы акселераторы не вообще не работали, а через раз !
Там же делать нечего, вставляешь
LoadAccellerators() до цикла обработки сообщений, и в него - TranslateMessage() до DispatchMessage().


Это у меня в _tWinMain()

...

hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_INKASBAG);

// Main message loop:
while (GetMessage(&msg, NULL, 0, 0))
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}//while (GetMessage(&msg, NULL, 0, 0))
...

причем сгенерирован этот кусок самим VS.Net при создании нового проекта (я тут ничего не менял) и сразу в таблице акселераторов вставлено

ID Modifier Key Type
IDM_ABOUT Alt ? ASCII

так вот, даже этот акселератор срабатывает через раз
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Очистка буфера клавиатуры
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]