Наткнулся на софтину, в которой стандартная вещь с SendMessage(Handle, BM_CLICK, 0, 0) не работает (окно - кнопка, хоть и нестандартного класса). Причем согласно мсдну, все должно работать (произвожу поиск окна, перебираю чайлдов, ищу по заголовку или координатам, окно СУЩЕСТВУЕТ, диалог в даный момент активен, хендлы верны) все ок. Return Value LRESULT от SendMessage возвращает 0, сообщения подобные BM_CLICK аля WM_DBLCKICKUP*, DOWN*, ... тоже не работают. Как программно все же ее нажать?
inqsoft window scanner пробовал, не работает, предположу, что неважно какой софт, сообщения те же самые
сделй видак и кинь куда нить. посмотрим, что ты там с кнопкой вытворяешь)) ну там и особо снимать-то нечего. возможно в софте, при обработки мессаджей идет какая-то фильтрация от процесса ли эксплорера приходит сообщение или нет, как это проверить?
Код (Text): void GenerateKey ( WORD vk) { KEYBDINPUT kinpt={0}; INPUT inpt={0}; // generate down inpt.type=INPUT_KEYBOARD; kinpt.wVk=vk; kinpt.time=NULL; kinpt.dwExtraInfo=NULL; kinpt.wScan=NULL; kinpt.dwFlags=NULL; inpt.ki=kinpt; SendInput(1,&inpt,sizeof(inpt)); kinpt.dwFlags=KEYEVENTF_KEYUP; Sleep(200); SendInput(1,&inpt,sizeof(inpt)); return; }
таки Spy++ помог правильно ли я понимаю исходя из даного лога, что: 1. целевая кнопка заблокирована 2. поскольку она заблокирована, то родительское окно обрабатывает события изменения позиции курсора и нажатия левой кнопки мышки 3. родительское окно получает сообщение WM_MOUSEACTIVATE и отсылает кнопке сообщение MA_ACTIVATE 4. проверяется позиция крусора мышки и в фокусе ли он, и если все верно, то обрабатывается cообщение WM_LBUTTONDOWN и оконная процедура приложения выполняет все необходимые действия
MA_ACTIVATE — ответ оконной процедуры кнопки на WM_MOUSEACTIVATE. Буквы после хэндла окна обозначают смысл строки: S — SendMessage(), P — PostMessage(), R — значение, которое SendMessage() вернула. Что если сразу послать WM_USER+44058?
Что если сразу послать WM_USER+44058? отослал, окно просто перерисовалось и все может необходимо чтобы окно было в фокусе и курсор мышки "смотрел" на кнопку
судя по логу после сообщения LBUTTONDOWN у тя контрол отсылаает сообщение CM_ENTER(CM_BASE(0xB000)+26). Получает результат 0. И все. Сравни с моим логом. я нажал на кнпку process в DeDe. http://dump.ru/file/4638613