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

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

Статические объекты Windows [D5, NT4]


Style ©   (2003-03-03 12:36:00) 

Можно ли получить доступ к статическим объектам винды зная HWND родительского окна. Например такие как Label. Просто хочу изменить Текст Label в другой программе из своей.??

Если FindNextControl вовразает только Handle Editoв Button"ов? Наверняка есть чтонибудь и для Static объектов!


Style   (2003-03-06 15:28:00) [1]

Народ! Я тут еще кое чего придумал. Можно из Exe вытащить описание Классов: Цените!!!

Там же есть указатели на адреса памяти.. Но как получить доступ к памяти другого процесса???

function EnumProc(hModule: integer; lpszType, lpszName: pchar;
lParam: LongInt ): boolean;
var
fl, ResID,Size: integer;
Res: HGlobal;
Mem: pchar;
begin

CreateDir("C:\ENUMRC");
ResID := FindResource(lParam,lpszName,RT_RCDATA);
size := SizeOfResource(lParam,ResId);
Res := GlobalAlloc(GHND ,Size);
Res := LoadResource(lParam,ResID);

GetMem(Mem,Size);
CopyMemory(Mem,PChar(Res),size);

fL := FileCreate("C:\ENUMRC\" + lpszName);
FileWrite(fl,Mem^,Size);
FileClose(fl);

result := true;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
Module: HModule;
begin
Module := LoadLibrary(PChar(Edit1.Text));
EnumResourceNames(Module, RT_RCDATA ,@EnumProc,Module);
end;

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
if(OpenDialog1.Execute) then
begin
Edit1.Text := OpenDialog1.FileName;
end;
end;



Style   (2003-03-06 09:20:00) [2]

2 SPeller ©

Уменя есть прога и получше ShowWin! Гораздо интереснее возвращает инфу о WindowID

2 All

Но StaticText и Label отличаются тем что У StaticText есть HWND но у Label нет. Но все-таки в памяти они хранятся. Я перекопал весь TControl. У него кроме WindowProc ничего нет!

А у TWinControl есть перечисление Controls (TList) в котором расположены любые Control в своем Z-Order и работает он сними опять же через Control.WindowProc
Функция Perfect которая и посылает сообщение на обработчик Controla.

Интересно причем все TWinCotrol добавляют себя в перечисление SetProps. (с Атомом процесса). А когда внутри TWinControl создаеться простой Control он автоматически добавляет себя в Controls (TList). Потому и приложение знает что они как бы существуют.

Т.е зная координаты объекта мы все-равно не сможем до него докопаться в чужoм приложении.

Единственный способ наверное получить доступ к потоку памяти другого процесса и найти указатель на Control.WindowProc

Но возможно ли это???


SPeller   (2003-03-06 04:38:00) [3]

2 Style

Мне тебя жалко... :-))
Вот тебе программулька, которая показывает хендл, текст и класс окна под курсором. Включается и выключается средней кнопкой мыши.
http://spellersoft.narod.ru/wndinfo.rar


i-C3H7OH   (2003-03-05 22:00:00) [4]

>>> @MyProc := ptr(Integer(@Label1.WindowProc)) //
>>> MyProc(Msg)
ты забыл, что у каждого процесса свое адрессное пр-во, так что ты там с адресами оконных функций намудрил - это не то.

если верить хелпу, STATIC CONTROL это окно, которое не получает фокус и проч. значит текст можно установить WM_SETTEXT


Style   (2003-03-05 09:06:00) [5]

Игорь Шевченко>> На счет ID, я был неправ!

но все же
У любого TControl есть WindowProc, это функция CallBack
Функции - это указатель на Адрес!
Наверняка можно капнуть к памяти другого процесса и найти Адрес нужной процедуры т.е TControl.WndProc

Например мы можем Менять Label.Text и так

var
Msg: TMessage;
Txt: pchar;
begin
Txt := "New Label Text";

Msg.Msg := WM_SETTEXT;
Msg.wParam := 0;
Msg.Lparam := Txt;

Label.WindowProc(Msg)

Т.е. Если знать WndProc вернее его Dword ptr можно творить все что угодно!

А вызвать адрес хотелось бы так

var
MyProc: function(var Message: TMessage): boolean;

begin

@MyProc := ptr(Integer(@Label1.WindowProc)) //
MyProc(Msg)

Но если смотреть в Debug код несколько отличаеться от TControl.WndProc и соответсвенно адрес получаеться другой

И чего то я вообще запутался.. Но еще не все потерено!


Игорь Шевченко   (2003-03-04 13:34:00) [6]


> Любой рисунок это Static.
> Но у Static есть свой ID! Вот как бы до него докапаться?


Неправда


Style   (2003-03-04 12:10:00) [7]

>>ZZ
Любой рисунок это Static.
Но у Static есть свой ID! Вот как бы до него докапаться?

Была одна жестокая маза я года два назад Писал прогу (для обучения работы в другой проге) т.е. Был некий Язык интерпретатор в неком файле *.tst. Например:

GETWINDOW Explorer
GETCONTROL Button1
Button1.SetWidth(56);

Хотелсь получить доступ и к Static!


Style   (2003-03-04 11:58:00) [8]

Удалено модератором
Примечание: Offtopic


Игорь Шевченко   (2003-03-04 11:43:00) [9]

Style (04.03.03 09:57)

Лучше бы ты русским языком занялся, вместо того, чтобы Label мучить


ZZ   (2003-03-04 10:55:00) [10]

Style
А к тому, что label - это просто рисунок :( (точно это не окно и сообщений он не получает)

ЗЫ. Сам ищу способ достать текст label"a...


Style   (2003-03-04 09:57:00) [11]

А речь и не идет о TLabel. Хотя Label при запуске приложения возможно становится Static объектом. А при его перерисовке дергается 15 сообщени Видны WM_GETTEXT.
Интересно я пробовал менять WNDPROC у Label таким образом можно было докапаться то его ID и HWND. Но потом я его вовсе терял.
Можно попробовать докапаться до WNDPROC формы, а потом через сообщение WM_COMMAND по ID капать Static объекты. Ну зачем то же эти сообщения нужны.???
Я еще немного покапаю конечно!

>> Игорь Шевченко
А к чему такая уверенность что "нету"???


Opuhshii   (2003-03-03 16:24:00) [12]

не путайте TLabel и Static,. это они внешне похожи,..


Style   (2003-03-03 15:03:00) [13]

WM_COMMAND
{
STN_CLICKED
STN_DBLCLK
STN_DISABLE
STN_ENABLE
STM_GETICON
STM_SETICON
}

WM_CTLCOLORSTATIC

Интересно зачем же это тогда нужно?? Все такие какието сообщения возвращают нам HWND но тока как их юзать я не понял...


Игорь Шевченко   (2003-03-03 12:43:00) [14]

Нету


Наверх

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