Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Получение текста другого окна [D6, WinXP]


DDi ©   (2002-09-27 02:11:00) 

Приветствую!
Собственно меня интересует такой вопрос: "Ну японский бог, ну почему же не работает этот код!!!" :) -->


procedure TForm1.Button1Click(Sender: TObject);
var
h: THandle;
Buf: PChar;
begin
h := FindWindowEx(FindWindow("Notepad",nil),0,"Edit",nil);
GetWindowText(h,Buf,GetWindowTextLength(h));
Label1.Caption := "Text = " + Buf;
end;


Подскажите рабочий способ.
Зараннее спасибо всем ответившим!


Song   (2002-10-03 18:14:00) [1]

2Almaz © (28.09.02 00:54)
Пообщайтесь, с Анатолием Подгорецким. Он расскажет Вам что значит сия идиома. Кстати очень удивлён, что не знаете.


grifon   (2002-10-03 17:16:00) [2]


> procedure TForm1.Button1Click(Sender: TObject);
> var
> h: THandle;
> Buf: PChar;
> I : Integer;
> begin
> h := FindWindowEx(FindWindow("Notepad",nil),0,"Edit",nil);
> I := SendMessage(h,WM_GETTEXTLENGTH,0,0);
> GetMem(Buf,I);
> SendMessage(h,WM_GETTEXT,I+1,Integer(Buf));
> Label1.Caption := "Text = " + String(Buf);
> FreeMem(Buf);
> end;

А почему при изменении 7-ой строчки на

I := SendMessage(GetFocus,WM_GETTEXTLENGTH,0,0);

код неработает? По идее должен возвращаться текст активного Edit?


Almaz   (2002-09-28 00:54:00) [3]


> Song © (27.09.02 08:36)
> Пушкин А.С. знает точно!

Точно не знает - он умер до рождения Delphi.


> DDi (27.09.02 02:11)
> Приветствую!
> Собственно меня интересует такой вопрос: "Ну японский бог,
> ну почему же не работает этот код!!!" :) -->

Потому, что функция GetWindowTextработает только в пределах одного процесса. Т.е. с ее помощью нельзя получить тект из окна другого приложения.


> Подскажите рабочий способ

См. Guerrillero © (27.09.02 10:45)

Удачи.


Guerrillero   (2002-09-27 10:45:00) [4]

такой код у меня работает:
procedure TForm1.Button1Click(Sender: TObject);
var
h: THandle;
Buf: PChar;
I : Integer;
begin
h := FindWindowEx(FindWindow("Notepad",nil),0,"Edit",nil);
I := SendMessage(h,WM_GETTEXTLENGTH,0,0);
GetMem(Buf,I);
SendMessage(h,WM_GETTEXT,I+1,Integer(Buf));
Label1.Caption := "Text = " + String(Buf);
FreeMem(Buf);
end;


LordOfSilence   (2002-09-27 09:16:00) [5]

А где именно не работает?
На какой строке кода сбоит?
Вдогонку - сколько байт у Вас выделено под переменную Buf?


Song   (2002-09-27 08:36:00) [6]

Пушкин А.С. знает точно!


Наверх

Титульная страница Поиск, карта сайта Написать письмо