Как работать со сторонними окнами в делфи? Например, открыто окно ICQ, как будет выглядеть программно через делфи ввести какой-нибудь текст в поле сообщения в ICQ?
procedure TForm1.Button1Click(Sender: TObject); var S,S1 : HWND; begin S:= FindWindow(nil,'Navicat 8 for MySQL'); S1:=FindWindowEx(S, 0, 0, 'Connection'); SendMessage(S1, WM_LBUTTONDOWN, 0,0); SendMessage(S1, WM_LBUTTONUP, 0,0); end; почему ни как не реагирует? создал тупо прогу с кнопкой которая выводит showmessage... в ней получается нажать на кнопку... а вот в ICQ, калькуляторе и любых других не получается нажать...
1. После вызова FindWindow и FindWindowEx почему нет проверки хендла? может не нашел (не верно указал класс, кепшен и т.п.)? Попробуй с помощью Spy++ посмотреть - правильные ли captions смотришь, может там не Connection, а &Connection, разницу улавливаешь? 2. Лучше посылать не вниз-вверх, а BM_CLICK
S:= FindWindow(nil,'[тут логин] - Окно сообщений| ICQ# аська'); S1:=FindWindowEx(S, 0, 0, 'Отправить'); S = 656594 S1 = 0 а через sky++ показывает хенлд окна 000A04D2 т.е я так понял он не может получить хенд кнопки? в чем проблема..
S равно 656594.. а S1 почему-то 0... Code: procedure TForm1.Button1Click(Sender: TObject); var S,S1 : HWND; begin S:= FindWindow(nil,'[name002] - Окно сообщений | User ID name002@qip.ru'); S1:=FindWindowEx(S, 0, 0, 'Отправить'); ShowMessage(IntToStr(S1)); SendMessage(S1, WM_LBUTTONDOWN, 0,0); SendMessage(S1, WM_LBUTTONUP, 0,0); end;
в одной программе может нажать... а в другой (ICQ) нет... может надо класс кнопки указывать или еше что то?
В некоторых программах кнопки - вовсе не кнопки, а просто картинки. В этом случае нужно посылать WM_LBUTTONDOWN - WM_LBUTTONUP с нужными координатами
s1 = 0, что прямо говорит, что ты не получаешь хендл нужного объекта. Покажи софт сюда, посмотрим. Попробуй не через Caption, а через класс (в третьем параметре) или их связку. Посмотри точные имена классов и надписей.