Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.08.2007, 15:44   #1
Hintman
Пользователь
 
Регистрация: 14.04.2007
Сообщений: 28
По умолчанию Не работает функция keybd_event

Подскажите, что происходит?
Нужно программно нажать клавишу 's'.

Вот код, который должен быть:
Код:
keybd_event(ord('s'), 0, 0, 0);
keybd_event(ord('s'), 0, KEYEVENTF_KEYUP, 0);
Но он не работает! Нажимается почему-то клавиша 'e'!

Вот код, который написал я:
Код:
keybd_event(17, 38, 0, 0);
keybd_event(17, 38, KEYEVENTF_KEYUP, 0);
В этом случае программа работает и клавиша 's' нажимается.

То же касается и всех остальных клавиш.
Первый вариант не работает (хотя везде сказано, что нужно писать именно так),
второй вариант отлично работает, но причем тут число 17?
Какая-то путаница в параметрах.

Точно также "путаются" клавиши при использовании функции SendMessage (PostMessage).
В чем же здесь дело? А может есть другие варианты нажатия клавиш (в окне чужого приложения)?
Hintman вне форума Ответить с цитированием
Старый 23.08.2007, 16:06   #2
still_alive
Great Code Monkey
Форумчанин
 
Аватар для still_alive
 
Регистрация: 09.08.2007
Сообщений: 533
По умолчанию

Потому что не ord('s'), а ord('S')!
still_alive вне форума Ответить с цитированием
Старый 23.08.2007, 16:14   #3
Hintman
Пользователь
 
Регистрация: 14.04.2007
Сообщений: 28
По умолчанию

Не совсем понятно, почему, ведь надо маленькая 's'...

Последний раз редактировалось Hintman; 23.08.2007 в 18:34.
Hintman вне форума Ответить с цитированием
Старый 23.08.2007, 16:38   #4
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

keybd_event(Key,0,KEYEVENTF_EXTENDE DKEY or KEYEVENTF_KEYUP,0);
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 23.08.2007, 16:57   #5
Hintman
Пользователь
 
Регистрация: 14.04.2007
Сообщений: 28
По умолчанию

Попробовал так:
Код:
keybd_event(ord('s'),0, 0, 0);
keybd_event(ord('s'), 0,KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP, 0);
Не работает, как и прежде.

А вот этот код успешно нажимает клавишу 's':
Код:
keybd_event(17, 31, 0, 0);
keybd_event(17, 31, KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP, 0);
Я знаю, что 1-й параметр функции keybd_event - это код виртуальной клавиши,
2-й параметр - аппаратный скэн-код (в нашем случае равен 0).

Но почему тогда 1-й вариант так и не работает,
а 2-й вариант с бредовыми параметрами прекрасно работает для любых клавиш (не только 's')?
Hintman вне форума Ответить с цитированием
Старый 23.08.2007, 17:00   #6
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

С чего взяли что не работает ?
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 23.08.2007, 17:04   #7
Hintman
Пользователь
 
Регистрация: 14.04.2007
Сообщений: 28
По умолчанию

Я только что это проверил.
Hintman вне форума Ответить с цитированием
Старый 23.08.2007, 17:10   #8
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

Ок, раз вы такие скрытные, то удачи )
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 23.08.2007, 17:15   #9
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

Мы не медиумы... показывайте код, рассказывайте задачу, описывайте что должно быть и что получается вместо того что должно было бы
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 23.08.2007, 17:23   #10
Hintman
Пользователь
 
Регистрация: 14.04.2007
Сообщений: 28
По умолчанию

Вот такой код:
Код:
  i:=45;
  repeat
  keybd_event(17,i,KEYEVENTF_EXTENDEDKEY, 0);sleep(50);
  keybd_event(17,i,KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP, 0); //S-ave
  Inc(i);
  until i>=55;
Выводит строку символов xcvbnm'

А вот этот код:
Код:
  i:=0;
  repeat
  keybd_event(i,0,KEYEVENTF_EXTENDEDKEY, 0);sleep(50);
  keybd_event(i,0,KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP, 0); //S-ave
  Inc(i);
  until i>=100;
не выводит ничего.
Hintman вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Функция Tregistry.keyexists не работает Ozerich Общие вопросы Delphi 5 18.09.2008 09:42
Не работает функция gets()!!! Ilya'91 Общие вопросы C/C++ 1 28.07.2008 23:16
Не работает функция floor в Java POPOV Помощь студентам 1 24.04.2008 14:08
keybd_event [Smarik] Win Api 1 23.03.2008 18:11
не корректно работает функция "если" (+) zetrix Microsoft Office Excel 0 30.10.2006 19:19