powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Обработка событий клавиатуры
12 сообщений из 12, страница 1 из 1
Обработка событий клавиатуры
    #38222561
dymal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток!

Возник вопрос: как можно реализовать на C# следующее действие.

При нажатии на клавишу на клавиатуре записать информацию в буфер, а потом, с некоторой задержкой, передать в форму для дальнейшей обработки.

Пробовал в форме переопределять WndProc. Сохранять в буфере сообщение. Потом планировал сообщение передать методу base.WndProc. Но этот способ у меня не заработал после добавления TextBox на форму по той причине, что в WndProc не попадают сообщения клавиатуры.

Если отлавливать нажатия/отпускания клавиш в обработчике события WM_KEYDOWN/WM_KEYUP. Но в этом случае не знаю как передать сообщение после задержки так, чтобы программа не зациклилась.

Подскажите как довести до ума какой-нибудь из этих способов или предложите свой.

Подобное на Delphi реализовывал, но мне нужно это сделать на C#

Заранее благодарен
...
Рейтинг: 0 / 0
Обработка событий клавиатуры
    #38222768
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Лучший способ - почитать MSDN о событиях клавиатуры
...
Рейтинг: 0 / 0
Обработка событий клавиатуры
    #38222850
dymal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cat2, если делать по первому варианту, то я не нашел способа чтобы события клавиатуры попадали в WndProc. Пробовал устанавливать свойство KeyPreview = true, события клавиатуры все равно не попадают в эту процедуру (это только после добавления компонентов на форму, если на форме нет компонентов, то события приходят).

Если рассматривать второй вариант , то как мне отправить нажатие на клавишу в форму? Если посылать сообщение WM_KEYDOWN или вызывать SendKeys.SendWait() то как потом в обработчике определить: нажата физическая клавиша или это эмуляция нажатия.

Сделал пока так: на время отправки эмулированного нажатия устанавливаю флаг. И в обработчике события анализирую: если флаг поднят, то пропустить это событие, не записывая в буфер. Но в этом случае есть вероятность (хоть и очень маленькая) того, что в то время, как будет поднят флаг пользователь нажмет на клавишу.
...
Рейтинг: 0 / 0
Обработка событий клавиатуры
    #38222891
Фотография fortibransa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хосподя, для эстонцев штоли прогу пишут, а то они не успевают за клавишами.
...
Рейтинг: 0 / 0
Обработка событий клавиатуры
    #38223359
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
private void Form1_KeyPress(object sender, KeyPressEventArgs e)
        {
                  //сделать что-то
                  .......
                  Thread.Sleep(1000);
                  //сделать еще что-то
                  .......

        }
...
Рейтинг: 0 / 0
Обработка событий клавиатуры
    #38223523
dymal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Pallaris, спасибо за подсказку, но этот вариант мне не подходит, так как на время этой задержки Форма будет "зависшей", так как не будут обрабатываться другие сообщения. Вот мне необходимо реализовать ИМЕННО через буфер.

В исходной задаче я не написал, что решение о том следует ли эмулировать нажатия клавиш из буфера принимается при принятии следующего события клавиатуры. Поэтому мне нужна реализация именно через буфер.
...
Рейтинг: 0 / 0
Обработка событий клавиатуры
    #38223541
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dymalPallaris, спасибо за подсказку, но этот вариант мне не подходит, так как на время этой задержки Форма будет "зависшей", так как не будут обрабатываться другие сообщения.

Выполните первую часть действий, запустите таймер. В событии timer_elapsed выполните вторую часть действий.
...
Рейтинг: 0 / 0
Обработка событий клавиатуры
    #38223968
dymal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Pallaris, я пытаюсь рассказать, что у меня не возникло проблем с тем КОГДА запускать второе действие. Вопрос в том как выполнить второе действие?
...
Рейтинг: 0 / 0
Обработка событий клавиатуры
    #38224116
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что во втором действии надо сделать?
Пока я думаю что-то типа RunVtoroeDeystvie();
...
Рейтинг: 0 / 0
Обработка событий клавиатуры
    #38224467
dymal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Pallaris, второе действие должно отправить сообщение на обработку контроллам формы. Причем это нужно сделать так, чтобы нажатие клавиши не попало в буфер.
Напомню: ПЕРВОЕ ДЕЙСТВИЕ: при нажатии клавиши сообщение попадает в буфер и не передается дальше на обработку контроллам формы. Затем запускается таймер на N миллисекунд. При прошествии этих N миллисекунд мне необходимо выполнить ВТОРОЕ ДЕЙСТВИЕ: обработать это сообщение клавиатуры (или не обработать в зависимости от некоторого условия). Обработка заключается в стандартной диспетчеризации событий - в контроллы.
...
Рейтинг: 0 / 0
Обработка событий клавиатуры
    #38224512
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dymal,
Почему бы все это не материализовать через WndProc, и делегат с пулом потоков?
зы имхо как будущий пользователь ваше программы, хочу предостеречь от "комплиментов" создателю
...
Рейтинг: 0 / 0
Обработка событий клавиатуры
    #38224546
dymal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Где-то в степи, в своем первом посте я писал, что я пробовал реализовать свою задачу через WndProc, но у меня появилась проблема - при добавлении контроллов на форму в WndProc перестали поступать сообщения от клавиатуры, хотя устанавливал Form.KeyPrewiew = true.
По поводу пула потоков: я не вижу ему здесь применения. Если не сложно - опишите ваш вариант.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Обработка событий клавиатуры
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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