Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.06.24;
Скачать: CL | DM;

Вниз

Внедрение в другой процесс   Найти похожие ветки 

 
RazorbladE ©   (2002-04-18 08:53) [0]

Мастера !

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

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


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

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


 
Ally ©   (2002-04-18 12:10) [2]

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

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


 
Song ©   (2002-04-18 12:53) [3]

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


 
Ally ©   (2002-04-18 14:32) [4]

> 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 15:01) [5]

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

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


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

>Song ©

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

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

Удачи.


 
Raptor ©   (2002-04-25 15:11) [7]

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


 
Almaz ©   (2002-04-25 19:34) [8]

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

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

Удачи.



Страницы: 1 вся ветка

Текущий архив: 2002.06.24;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.018 c
7-77648
Monak
2002-03-28 08:41
2002.06.24
Клава и мышь!


1-77356
antonp
2002-06-12 21:22
2002.06.24
Как достать значение из памяти другой проги?


3-77326
asafr
2002-05-29 15:15
2002.06.24
Хранимая процедура и переменное название таблицы


14-77603
Дмитрий Баранов
2002-05-22 12:30
2002.06.24
Оффтопик (VC++)


7-77641
МИФИст
2002-03-29 00:48
2002.06.24
Нажатие Backspace...