Консультация № 66558
11.12.2006, 19:26
0.00 руб.
0 1 1
Здраствуйте! Помогите, пожалуйста, решить проблему: Есть чужое окно (Windows окно из DLL,идентификатор окна известен), на нём CheckBox и кнопка. Нужно найти эти компонеты, нажать на CheckBox(чтоб был с галочкой),а потом на кнопку. Пытался сделать с помощью посылки сообщений, но запутался.

Обсуждение

Неизвестный
12.12.2006, 06:28
общий
это ответ
Здравствуйте, Clr!

В приложении тестовый код. На форме находятся две кнопки, один checkbox. У кнопки которую надо найти Caption равен ‘Далее‘ у checkbox`а ‘Согласен‘, причем у кнопки подчеркнута буква "Д" (это очень важно) а у чекбокса "С" то есть нам надо уже искать не "Далее" а "&Далее". Дальше все просто, нажимаем на первую кнопку (Button1) и выполняем следующий код: находим окно с заголовком "Form1" (если не находим то выдаем сообщение и выходим из программы), находим чекбокс (если не находим то .......) посылаем ему сообщение что на него нажали, находим кнопку (если не находим то ........), посылаем ей сообщение что ее нажали. Вот пожалуй и весь ответ на ваш вопрос.

Приложение:
unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) Button1: TButton; CheckBox1: TCheckBox; Button2: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);var wnd, btn, chbx : hwnd;begin wnd := findwindow(nil,‘Form1‘); if wnd <> 0 then begin chbx := findwindowex(wnd,0,nil,‘&Согласен‘); if chbx <> 0 then begin sendmessage(chbx,bm_click,0,0); //здесь можно поставить задержку //sleep(1000); btn := findwindowex(wnd,0,nil,‘&Далее‘); if btn <> 0 then begin sendmessage(btn,bm_click,0,0) end else begin showmessage(‘Button не найден‘); application.Terminate; end; end else begin showmessage(‘Checkbox не найден‘); application.Terminate; end; end else begin showmessage(‘Окно не найдено‘); application.terminate; end;end;end.
Форма ответа