-
На форме программы имеются строка ввода (TEdit) и кнопка (TButton). Как из другой программы программно ввести в TEdit нужный текст и нажать на кнопку? Название программы, заголовок формы, идентификаторы строки ввода и кнопки известны: допустим – Project1, Form1, Edit1, Button1.
-
H1:=FindWindow(nil,'Form1');//хэндл проги H2:=FindWindowEx(H1,0,'Button','Button1');//хэндл кнопки SendMessage(H2,BM_CLICK,0,0);//нажать на кнопку H3:=FindWindowEx(H1,0,'Edit','Edit11');//хэндл эдита SendMessage(H3,WM_SETTEXT,0,lparam(LPCTSTR('Вводимый текст')));//посылаешь текст в эдит
-
сори, 'Button'->'TButton', 'Edit'->'TEdit', 'Edit11'->'Edit1'
-
Проверил. Хэндлы эдита и кнопки не определяются (h2=0, h3=0). И, наверно, поэтому не работают сообщения для них. :(
-
Логично, код в студию.
-
procedure TMaiFrm.Item1Click(Sender: TObject);
var
H, H3, H2: HWND;
begin
H:=FindWindow(nil, 'Form1');
if H<>0 then
begin
H3:=FindWindowEx(H,0,'TEdit','Edit1');
if H3<>0 then ShowMessage('хэндл эдита'); SendMessage(H3,WM_SETTEXT,0,lparam(LPCTSTR('UPT')));
H2:=FindWindowEx(H,0,'TButton','Button1');
if H2<>0 then ShowMessage('хэндл кнопки'); SendMessage(H2,BM_CLICK,0,0);
end;
end;
-
с чего вы взяли H3:=FindWindowEx(H,0,'TEdit','Edit1'); ? Классы окон узнать неплохо бы для начала. Spy++ в руки и вперед.
-
Подскажите, откуда можно БЕЗ ПРОБЛЕМ скачать Spy++?
-
-
> DVM © (21.03.10 21:14) [6] > > с чего вы взяли H3:=FindWindowEx(H,0,'TEdit','Edit1'); ? > > Классы окон узнать неплохо бы для начала. Spy++ в руки и > вперед.
Значение какого параметра из свойств, к примеру, нашего TEdit'a считать классом окна (по проге Spy++)?
Если брать хэндл "окна" эдита, то всё работает, но это не решение, т.к. после перезапуска проги с эдитом хэндл изменяется ...
-
> Значение какого параметра из свойств, к примеру, нашего > TEdit'a считать классом окна (по проге Spy++)?
Который Class Name на закладке Class в окне которое появляется если дважды щелкнуть по окну в дереве окон Spy++
-
> > Значение какого параметра из свойств, к примеру, нашего > TEdit'a считать классом окна (по проге Spy++)? > > Если брать хэндл "окна" эдита, то всё работает, но это не > решение, т.к. после перезапуска проги с эдитом хэндл изменяется > ... >
Похоже без чтения учебников тут не обойтись. Спутать класс окна с хэндлом окна способен только неуч.
-
> DVM © (21.03.10 21:14) [6] > > с чего вы взяли H3:=FindWindowEx(H,0,'TEdit','Edit1');? > > Классы окон узнать неплохо бы для начала. Spy++ в руки и > вперед.
> Который Class Name на закладке Class в окне которое появляется > если дважды щелкнуть по окну в дереве окон Spy++
Не знаю, как у Вас, но в той проге Spy++, которую скачал я Class Name на закладке Class=TEdit. Поэтому я и задал вопрос: значение класса окна определённое прогой Spy++ =TEdit, что вызывает непонимание сообщения № [6].
> Похоже без чтения учебников тут не обойтись. Спутать класс > окна с хэндлом окна способен только неуч.
Читать надо ВНИМАТЕЛЬНО, если хотите КОНСТРУКТИВНО прокритиковать что-то! Я потому и спросил про класс окна, т.к. он равен TEDit в проге spy++. А про хэндл окна я сказал, потому его применение решает задачу, но только для одного сеанса работы проги с эдитом.
И, вообще, Вам, Германн, следует прочитать Правила поведения на форумах!
-
> TComponent © (22.03.10 17:24) [12]
> что вызывает непонимание сообщения № [6].
Я не говорю что класс и имя окна обязательно другие, я спросил лишь о том, точно ли вы уверены в названиях. Ибо если что-то одно будет не таким, то ничего найдено само собой и не будет. Это качается и полей ввода и самой формы. Например, я не могу гарантировать, что вы нашли оно той формы что требуется, ибо может быть несколько таких окон.
-
> TComponent ©
То что возвращает H:=FindWindow(nil, 'Form1'); равно хендлу искомого окна в Spy++ ? (он может подсветить нужное окно рамкой)
Сдается мне что у тебя два окна Form1 (одно из той программы в которой ты хочешь нажимать кнопки, а второе из той программы которая должна кнопки нажимать) и твой код берет не то что надо.
-
Заработало! Нашёл ошибку! Благодарю за помощь tippa и DVM!!!
-
> И, вообще, Вам, Германн, следует прочитать Правила поведения > на форумах!
> Заработало! Нашёл ошибку!
Правила я знаю наизусть. А вот книжки тебе всё же прочитать полезно. Ибо "метод ненаучного тыка" пригоден только некоторым.
Ну и формирование своих сообщения таким вот образом:
> Значение какого параметра из свойств, к примеру, нашего > TEdit'a считать классом окна (по проге Spy++)? > > Если брать хэндл "окна" эдита, то всё работает, но это не > решение, т.к. после перезапуска проги с эдитом хэндл изменяется > ... >
тоже свидетельствует о недостатке образования.
> Читать надо ВНИМАТЕЛЬНО, если хотите КОНСТРУКТИВНО прокритиковать > что-то!
Читаю я внимательно. Именно поэтому и отреагировал КОНСТРУКТИВНО
|