Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
3-12631
Avreliy
2003-04-15 21:02
2003.05.05
Отмена Post!


3-12655
AleksandrKu
2003-04-16 12:11
2003.05.05
StoredProc как добавить записи в 2 таблицы


6-12849
Кролик
2003-03-08 14:58
2003.05.05
Подключение к сети


3-12622
gary5555
2003-04-12 15:35
2003.05.05
Как сделать фильтрацию в уже профильтрованной базе???


4-12969
Nick Denry
2003-03-06 14:11
2003.05.05
Combobox на Api





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский