![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Получение текста другого окна [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]Пушкин А.С. знает точно!