Форум: "WinAPI";
Текущий архив: 2003.05.05;
Скачать: [xml.tar.bz2];
ВнизСтатические объекты Windows Найти похожие ветки
← →
Style (2003-03-03 12:36) [0]Можно ли получить доступ к статическим объектам винды зная HWND родительского окна. Например такие как Label. Просто хочу изменить Текст Label в другой программе из своей.??
Если FindNextControl вовразает только Handle Editoв Button"ов? Наверняка есть чтонибудь и для Static объектов!
← →
Игорь Шевченко (2003-03-03 12:43) [1]Нету
← →
Style (2003-03-03 15:03) [2]WM_COMMAND
{
STN_CLICKED
STN_DBLCLK
STN_DISABLE
STN_ENABLE
STM_GETICON
STM_SETICON
}
WM_CTLCOLORSTATIC
Интересно зачем же это тогда нужно?? Все такие какието сообщения возвращают нам HWND но тока как их юзать я не понял...
← →
Opuhshii (2003-03-03 16:24) [3]не путайте TLabel и Static,. это они внешне похожи,..
← →
Style (2003-03-04 09:57) [4]А речь и не идет о TLabel. Хотя Label при запуске приложения возможно становится Static объектом. А при его перерисовке дергается 15 сообщени Видны WM_GETTEXT.
Интересно я пробовал менять WNDPROC у Label таким образом можно было докапаться то его ID и HWND. Но потом я его вовсе терял.
Можно попробовать докапаться до WNDPROC формы, а потом через сообщение WM_COMMAND по ID капать Static объекты. Ну зачем то же эти сообщения нужны.???
Я еще немного покапаю конечно!
>> Игорь Шевченко
А к чему такая уверенность что "нету"???
← →
ZZ (2003-03-04 10:55) [5]Style
А к тому, что label - это просто рисунок :( (точно это не окно и сообщений он не получает)
ЗЫ. Сам ищу способ достать текст label"a...
← →
Игорь Шевченко (2003-03-04 11:43) [6]Style (04.03.03 09:57)
Лучше бы ты русским языком занялся, вместо того, чтобы Label мучить
← →
Style (2003-03-04 11:58) [7]Удалено модератором
Примечание: Offtopic
← →
Style (2003-03-04 12:10) [8]>>ZZ
Любой рисунок это Static.
Но у Static есть свой ID! Вот как бы до него докапаться?
Была одна жестокая маза я года два назад Писал прогу (для обучения работы в другой проге) т.е. Был некий Язык интерпретатор в неком файле *.tst. Например:
GETWINDOW Explorer
GETCONTROL Button1
Button1.SetWidth(56);
Хотелсь получить доступ и к Static!
← →
Игорь Шевченко (2003-03-04 13:34) [9]
> Любой рисунок это Static.
> Но у Static есть свой ID! Вот как бы до него докапаться?
Неправда
← →
Style (2003-03-05 09:06) [10]Игорь Шевченко>> На счет 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 и соответсвенно адрес получаеться другой
И чего то я вообще запутался.. Но еще не все потерено!
← →
i-C3H7OH (2003-03-05 22:00) [11]>>> @MyProc := ptr(Integer(@Label1.WindowProc)) //
>>> MyProc(Msg)
ты забыл, что у каждого процесса свое адрессное пр-во, так что ты там с адресами оконных функций намудрил - это не то.
если верить хелпу, STATIC CONTROL это окно, которое не получает фокус и проч. значит текст можно установить WM_SETTEXT
← →
SPeller (2003-03-06 04:38) [12]2 Style
Мне тебя жалко... :-))
Вот тебе программулька, которая показывает хендл, текст и класс окна под курсором. Включается и выключается средней кнопкой мыши.
http://spellersoft.narod.ru/wndinfo.rar
← →
Style (2003-03-06 09:20) [13]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
Но возможно ли это???
← →
Style (2003-03-06 15:28) [14]Народ! Я тут еще кое чего придумал. Можно из 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;
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2003.05.05;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.008 c