![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| under_sun |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 141 Регистрация: 3.10.2007 Где: Ебург Репутация: нет Всего: 17 |
Приветствую.
Следующий код делает окно с дискриптором g_hWnd активным и посылает туда комбинацию клавиш Shift+O:
Проблема в следующем: если мы посылаем комбинацию этих клавиш, например, в блокнот, то нормально печатается 'O'. Но если затем начинаем там набирать текст, то продолжают печататься заглавные буквы, как-будто Shift продолжает быть в нажатом состоянии. Если использовать AttachThreadInput( GetWindowThreadProcessId( g_hWnd, NULL), GetCurrentThreadId(), TRUE ), ситуация та же. Что я делаю не так? --------------------
TMTOWTDI |
|||
|
||||
| GremlinProg |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
так и есть, поскольку код отпускания клавиш отсутствует.
ключевые поля: wVk и dwFlags. флаг KEYEVENTF_KEYUP отпускает клавишу, если он отсутствует, значит клавиша нажата. если для обычных клавиш это не так важно, то для управляющих, таких как Ctrl, Shift, Caps и т.п. это существенно. у тебя получается, что SHIFT залипла. добавь код, отпускающий шифт. -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
||||
|
|||||
| under_sun |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 141 Регистрация: 3.10.2007 Где: Ебург Репутация: нет Всего: 17 |
Сделал так:
Не знаю почему, но проблема осталась. Пробовал еще так:
Где подвох --------------------
TMTOWTDI |
||||
|
|||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
все там же
-------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| under_sun |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 141 Регистрация: 3.10.2007 Где: Ебург Репутация: нет Всего: 17 |
Проверил, все равно Shift залипает. Кроме того надо одну 'O' печатать.
--------------------
TMTOWTDI |
|||
|
||||
| GremlinProg |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
Добавлено через 3 минуты и 18 секунд попробуй keybd_event Добавлено через 11 минут и 32 секунды ну или 'O' вместо VkKeyScan('O')
-------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
||||
|
|||||
| under_sun |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 141 Регистрация: 3.10.2007 Где: Ебург Репутация: нет Всего: 17 |
GremlinProg, спасибо.
С keybd_event заработало. Но я так и не понял причины, почему с SendInput не работает. --------------------
TMTOWTDI |
|||
|
||||
| dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 27 Всего: 158 |
||||
|
||||
| GremlinProg |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
не, дело не в задержке, смотрим определение союза:
суть в том, что в союзе первый член типа MOUSEINPUT, у которого первые два поля типа LONG в союзах агрегатаов инициализация идет сначала, т.е. первый компонент союза, второй, и т.д., следовательно KEYEVENTF_KEYUP пишется не в поле dwFlags, а в поле mouseData, которое находится по большему смещению. отсюда и залипание клавиш. вот в таком варианте и SendInput работает
ничего не залипает Это сообщение отредактировал(а) GremlinProg - 11.11.2008, 22:57 -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
||||
|
|||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |