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

  • Автор темы nwnw
  • Дата начала
Статус
Закрыто для дальнейших ответов.
N

nwnw

Гость
#1
Давно уже мучает проблема (и не меня одного), облазил все форумы, перепробывал все советы, изгрыз кучу манов, толку 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! (жаль сырцов этой проги автор не выложил в опенсорсе)
Звиняйте, что столько букоф, но проблема мучает уже несколько месяцев и нуждается в подробной описании, может кто-нибудь и поможет разобраться...
 
N

nwnw

Гость
#3
<!--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???
 
N

nwnw

Гость
#5
SendMessage(hDIALOG, WM_COMMAND, nIDButon, 0);

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

но почему то не в 100% случаев.. странно, иногда работает прямо 20 раз подряд, затем перезагружаю комп, и опять ничего не работает, через 20 минут безуспешных тестов опять начинает работать!!!!!!
почему же так???? отчего зависит???
 
Z

zubr

Гость
#6
но почему то не в 100% случаев.. странно, иногда работает прямо 20 раз подряд, затем перезагружаю комп, и опять ничего не работает, через 20 минут безуспешных тестов опять начинает работать!!!!!!
почему же так???? отчего зависит???
Потому что PostMessage посылает сообщение процедуре окна и выходит из нее не дожидаясь завершения, а SendMessage, наоборот, дожидается завершения обработки сообщения процедурой окна.
 
N

nwnw

Гость
#7
<!--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 ничего не дала...
 

Kmet

Well-Known Member
Java Team
25.05.2006
1 036
8
#8
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.
 
Статус
Закрыто для дальнейших ответов.