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

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

Внедрение в другой процесс [D5, Win95/98]


RazorbladE ©   (2002-04-18 08:53:00) 

Мастера !

Хотелось бы получить !! пример внедрения в другой процесс !!,
поиска элементов управления на окне того процесса для посылки
им сообщений...

{
Продолжение предыдущего вопроса про macro ListView_GetItemTex(...)
}
P.S. WinAPI занимаюсь недавно поэтому... МНОГО вопросов...


Almaz   (2002-04-25 19:34:00) [1]

2 Raptor
Нет, это ты ошибаешься.
Я только что проверил свое предположение в Win2k. И получил такой результат - если закрытому Edit"у послать сообшение WM_GETTEXT из своего процесса, то результатом будет пустая строка. Если же послать WM_GETTEXT из ловушки, внедренной в процесс, породивший Edit, то получишь тот самый скрытый текст. Не веришь - проверь.

Однако в Win98 закрытый текст можно получить сообщением WM_GETTEXT, откуда бы оно не было послано.

Удачи.


Raptor   (2002-04-25 15:11:00) [2]

2 Almaz
Ты ошибаешься.


Almaz   (2002-04-24 00:45:00) [3]

>Song ©

> Однако WM_GETTEXT должен. Здесь нет ограничений.

Если я не ошибаюсь, WM_GETTEXT в WinNT/2k для закрытого Edit"a даст реальное значение только, если вызывающая функция находится в адресном пространстве процесса, породившего окно с этим Edit"ом.

Удачи.


Song   (2002-04-18 15:01:00) [4]

1. Чисто гепатетически у Вас работать этот вариант не будет потому что копироваться содержимое Edit1 просто не успевает. Надо поставить Application.ProcessMessages; после копирования.
2. Понимаю сво ошибку. Действительно погарячился. Буфер обмена не работает с закрытыми Edit

Однако WM_GETTEXT должен. Здесь нет ограничений.


Ally   (2002-04-18 14:32:00) [5]

> Song

Написал простенький код (см. ниже): поле edit1 - со звездочками. По нажатию кнопки копируем содержимое edit1 в буфер и вставляем его оттуда в поле edit2 c помощью пары WM_COPY -> WM_PASTE.


unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TForm1 = class(TForm)
Edit1: TEdit; //PasswordChar := #42; - поле со звездочками
Edit2: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
Edit2.Text := EmptyStr;
SendMessage(Edit1.Handle, WM_COPY, 0, 0);
SendMessage(Edit2.Handle, WM_PASTE, 0, 0);
end;

end.


Правильно ли я Вас понял, Song? И не забыл ли чего-нибудь, потому что эффекта это не дает никакого (во всяком случае, в Win2k), пока Edit1.PasswordChar имеет значение <> #0. И работает совершенно зашибенско, если я присваиваю Edit1.PasswordChar:=#0; Замечу, что речь пока идет о контролах на одной форме (кстати, GetWindowText() в этом случае работает).

Заранее признателен, Ally.

ЗЫ. Повторюсь: хотелось бы поставить вопрос шире и решить его для Win2k.


Song   (2002-04-18 12:53:00) [6]

2Ally © (18.04.02 12:10)
Прокатит WM_COPY


Ally   (2002-04-18 12:10:00) [7]

> Antiox
Ну а если, скажем, надо взять текст из edit"а со звездочками (разумеется в чужом окне), но не в Win95/98, что сравнительно просто, а в Win2k? Никакой WM_GETTEXT, GetWindowText или что-нибудь в этом роде из своего процесса в винтукее не прокатит, и, видимо, придется внедряться чужой... Хотя я не уверен, что и это пройдет здесь.

ЗЫ. Sorry за оффтоп - вопрос-то был как раз про Win95/98, где с этим (см. выше) проблем нет :)


Antiox   (2002-04-18 11:49:00) [8]

Для "внедрения" в адресное пространство другого процесса можете использовать DLL + hooks.
А для посылки сообщений элементам "чужого" окна вовсе не обязательно внедряться в процесс, из которого это окно было вызванно.


Наверх

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