Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Win API


Информационный Канал Subscribe.Ru

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / WinAPI

Выпуск № 194
от 28.01.2006, 20:06

Администратор:Калашников О.А.
В рассылке:Подписчиков: 257, Экспертов: 29
В номере:Вопросов: 1, Ответов: 2


Вопрос № 33860: Здравствуйте, Уважаемые Эксперты. Хочу отправить окну сообщение о том что нажата кнопа. Использую функцию sendmessage(Handle,wm_keydown,9,0) чтобы отослать сообщение о том что нажата кнопа Tab но сообщение не доходит. Объясните как правильно ...

Вопрос № 33.860
Здравствуйте, Уважаемые Эксперты.
Хочу отправить окну сообщение о том что нажата кнопа.
Использую функцию sendmessage(Handle,wm_keydown,9,0) чтобы отослать сообщение о том что нажата кнопа Tab но сообщение не доходит. Объясните как правильно отсылать сообщения о нажатии клавиш.
Отправлен: 23.01.2006, 03:41
Вопрос задал: Чурсанов Евгений Ильич (статус: 9-ый класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: n/a
Здравствуйте, Чурсанов Евгений Ильич!
На вскидку понять в чем именно проблема тяжело.
но сразу видна одна неточность.
MSDN описывает прототип функции как:
LRESULT SendMessage(HWND hWnd, UINT Msg, WPARAM wParam,LPARAM lParam);
То есть, возможно, присутствует ошибка в первом параметре: вместо hWnd используется Handle. Да, это однотипные структуры, но в Вашем примере, не исключено, что Вы используете хендл модуля приложения, а не его окна.
Проверьте, пожалуйста, действительно это так?
Должно быть SendMessage(hWnd_Целевого_окна, WM_KEYDOWN, 9, 0);

Кроме того, забегая вперед, возможно выгоднее использовать функцию PostMessage ?
Это аналог SendMessage, отличие только в том, что при "PostM.." исполнение кода не прерывается, а при "SendMessage" приостанавливается до тех пор, пока сообщение не будет обработано целевым окном.

Приложение:

Ответ отправил: n/a (статус: 2-ой класс)
Отправлен: 23.01.2006, 13:04

Отвечает: Ерёмин Андрей
Здравствуйте, Чурсанов Евгений Ильич!
1) Попробуйте заменить код клавиши (9) на именованную константу - VK_TAB.
2) Проверьте, что найденный handle больше 32. Если он меньше этого числа или равен 0, значит окно не найдено.
3) После выполнения этой строки обязательно выполните точно такую же строку, но с сообщением WM_KEYDOWN.
Должно работать.
---------
Работа - не волк, а произведение силы на расстояние!
Ответ отправил: Ерёмин Андрей (статус: Профессионал)
Отправлен: 23.01.2006, 14:43


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Яндекс Rambler's Top100

Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.winapifaq
Архив рассылки
Отписаться Вебом Почтой
Вспомнить пароль

В избранное