![]() |
|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 23.11.2010
Сообщений: 12
|
![]()
Здравсвуйте. Как организовать в программе выполнение процедуры до нажатия определённой клавиши при условии что окно программы не имеет фокуса или окно программы вовсе отсутствует?
То есть процедура представляет собой повторяющийся цикл, в конце которого происходит проверка "была ли нажата такая-то клавиша?". Сам вопрос в том как это нажатие клавиши "поймать"? |
![]() |
![]() |
![]() |
#2 |
Форумчанин
Регистрация: 02.01.2010
Сообщений: 254
|
![]()
посмотри GetAsyncKeyState, с её помощью можно проверять состояние клавиш и кнопок.
|
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 23.11.2010
Сообщений: 12
|
![]()
Ага... Ок. Только есть ещё вопрос: а не получится ли так что моя процедура пропустит это нажатие? Т.е. полное время выполнения цикла около секунды и за это время будет нажато допустим 2 клавиши - сначала нужная, а затем какая-то другая и эта другая попадёт на момент проверки - то я просто пропущу нужную? Может быть можно организовать какой-то буфер (или он уже где-то системно организован?) кнопок, нажатых за последнюю секунду?
Последний раз редактировалось blinkapec; 23.11.2010 в 22:54. |
![]() |
![]() |
![]() |
#4 |
Форумчанин
Регистрация: 02.01.2010
Сообщений: 254
|
![]()
если у приложения есть окно и оно активно, т.е. имеет фокус, то информация о всех нажатых клавишах помещается в очередь сообщений этого окна, и их оттуда можно легко извлечь. если окна нет, то тогда имеет смысл завести ещё один поток, который бы формировал подобную очередь самостоятельно, а основной поток выбирал бы нужные данные из неё.
|
![]() |
![]() |
![]() |
#5 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,792
|
![]() Цитата:
Я бы наверняка решал Хуками.
I'm learning to live...
|
|
![]() |
![]() |
![]() |
#6 |
Пользователь
Регистрация: 23.11.2010
Сообщений: 12
|
![]()
Вот идея о хуках тоже проскачила, хотя и параллельный поток тоже имеет смысл... Буду экспериментировать. Хотя если честно пока что всё работает, так как совместно с функцией GetAsyncKeyState я использую две проверки возвращаемого значения: о том нажата ли клавиша и о том была ли она нажата со времени последней проверки. Всё пока что исправно работает, но проблема в том что я читал что если другой процесс вызовет функцию GetAsyncKeyState то флаг о том что кнопка была нажата сбросится... Как говорится слава богу пока видимо этого не случалось =)
|
![]() |
![]() |
![]() |
#7 |
добрый няша
Старожил
Регистрация: 29.10.2006
Сообщений: 4,804
|
![]()
если нужна надёжность и 100% гарантия то надо использовать хуки.
|
![]() |
![]() |
![]() |
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Перехват нажатия клавиши | cw_o | Win Api | 10 | 08.02.2011 23:56 |
Ожидание нажатия клавиши | shurik_7866 | Общие вопросы Delphi | 2 | 25.04.2010 19:53 |
Эмуляция нажатия клавиши | helenfly | Win Api | 9 | 01.12.2009 12:09 |
время нажатия клавиши | BattleMage | Общие вопросы .NET | 2 | 19.09.2009 13:41 |
Емулиривание нажатия клавиши | xTANATOSx | Win Api | 9 | 10.10.2007 21:46 |