ОБСУЖДЕНИЕ

проблема с кликом по кнопке

7 ответов 7,8 тыс.
Статус
Закрыто для дальнейших ответов.
Автор темы
Давно уже мучает проблема (и не меня одного), облазил все форумы, перепробывал все советы, изгрыз кучу манов, толку 0х00.
Есть диалоговое окошко, в нем кнопки, для того чтобы нажать на кнопку совершенно справедливо получаем его хендл и посылаем ему сообщения типа SendMessage(h, BM_CLICK, 0, 0); или SendMessage(h, WM_LBUTTONDOWN, 0, 0); SendMessage(h, WM_LBUTTONUP, 0, 0); Таким образом мы имитируем клик мышки, либо жмахание Энтером по клаве - на обычных кнопках все получается, но на множестве остальных, в том числе и сабжевом - нифига, видно что кнопка сначала нажимается, потом отжимается, но и только, сам код не выполняется. Тут начинается самое интересное - известная утилита SpyXX от Микрософта показывает что нажимаем ли мы мышкой по кнопке, что имитируем програмно это дело, окно button получает все те же WM_LBUTTONDOWN сообщения. Заюзав также весьма удобную утилиту InqSoft Window Scanner (там есть сервис для отправки любому окну сообщения с любыми параметрами) отправив кнопке всего два сообщения WM_LBUTTONDOWN и WM_LBUTTONUP удалось добиться выполнения кода окна!!!
Все тот же СпайХХ никакой разницы в посылках этого WM_LBUTTONDOWN из InqSoft Window Scanner и моей проги не выявил! но код то выполняется только из этого злощасного Window Scanner! (жаль сырцов этой проги автор не выложил в опенсорсе)
Звиняйте, что столько букоф, но проблема мучает уже несколько месяцев и нуждается в подробной описании, может кто-нибудь и поможет разобраться...
 
А WM_COMMAND не помогает?
 
<!--QuoteBegin-grigsoft+15:09:2006, 05:43 -->
<span class="vbquote">(grigsoft @ 15:09:2006, 05:43 )</span><!--QuoteEBegin-->А WM_COMMAND не помогает?
[snapback]43905" rel="nofollow" target="_blank[/snapback]​
[/quote]
Интересно, а с какими это параметрами WParam и LParam???
 
SendMessage(hDIALOG, WM_COMMAND, nIDButon, 0);
 
SendMessage(hDIALOG, WM_COMMAND, nIDButon, 0);

точнее работает так PostMessage(hDIALOG, WM_COMMAND, nIDButon, hButton);

но почему то не в 100% случаев.. странно, иногда работает прямо 20 раз подряд, затем перезагружаю комп, и опять ничего не работает, через 20 минут безуспешных тестов опять начинает работать!!!!!!
почему же так???? отчего зависит???
 
но почему то не в 100% случаев.. странно, иногда работает прямо 20 раз подряд, затем перезагружаю комп, и опять ничего не работает, через 20 минут безуспешных тестов опять начинает работать!!!!!!
почему же так???? отчего зависит???
Потому что PostMessage посылает сообщение процедуре окна и выходит из нее не дожидаясь завершения, а SendMessage, наоборот, дожидается завершения обработки сообщения процедурой окна.
 
<!--QuoteBegin-zubr+18:09:2006, 04:47 -->
<span class="vbquote">(zubr @ 18:09:2006, 04:47 )</span><!--QuoteEBegin-->Потому что PostMessage посылает сообщение процедуре окна и выходит из нее не дожидаясь завершения, а SendMessage, наоборот, дожидается завершения обработки сообщения процедурой окна.
[snapback]43996" rel="nofollow" target="_blank[/snapback]​
[/quote]
ну и что? замена-то на SendMessage ничего не дала...
 
The BN_CLICKED notification code is sent when the user clicks a button.
The parent window of the button receives the BN_CLICKED notification code through the WM_COMMAND message.

Parameters

wParam
The low-order word contains the button's control identifier. The high-order word specifies the notification message.
lParam
Handle to the button.
 
Статус
Закрыто для дальнейших ответов.