· Начало · Статистика · WASM.RU · Noir.Ru ·

 WASM Phorum (Оффлайн - 24.11.2003) —› WASM.RESEARCH —› hmemcpy

Посл.отвђт Сообщенiе


Дата: Сен 18, 2003 20:41:05

Если кому интересно... Аналогом функции hmemcpy под NT - ёвыми системами (в том качестве, в котором она применяется под 98-й вместо GetWindowTextA) является функция CallWindowProcA. 2 параметр - дескриптор окна, 3 - сообщение, 5 - адресс буфера, который получет текст окна. В частности, все компоненты Delphi используют именно этот вызов. Т.е. чтобы выловить следующие фрагменты

str := Edit1.Text;
... или ...
Form1.Caption := str;

надо этот бряк и поставить
bpx CallWindowProcA if (*(esp+c)==0xD)||(*(esp+c)==0xC) do "d *(esp+14); p ret"
Думаю, что компоненты Borland C++ юзают то же самое...


Дата: Сен 18, 2003 20:55:24

Предвижу возможный ответ: "Ну, ты и герой... можно подумать - Америку открыл!"... Согласен :). Просто я полазил в поиске, было несколько вопросов по данному поводу (и мой недавно, в том числе) и ни одного толкового ответа! Вот я и решил, скажем так, подитожить...


Дата: Сен 18, 2003 20:57:07

Спасибо. А кто наедет - тому я сам по рогам надаю.


Дата: Сен 18, 2003 22:25:13

Хм... Так это почти как "invoke WndProc,hEdit,WM_GETTEXT,wP,lP".

Единственное различие, вроде:
The CallWindowProc function handles Unicode-to-ANSI conversion.


Дата: Сен 19, 2003 09:26:53

спасибо. полезная тема.


Дата: Сен 19, 2003 11:19:49

Godness
Аналогом функции hmemcpy под NT - ёвыми системами (в том качестве, в котором она применяется под 98-й вместо GetWindowTextA) является функция CallWindowProcA
hmemcpy вызывается из GetWindowText. А вместо GetWindowText ее напрямую никто не применяет. А в NT hmemcpy вообще нет, там, наверное, применяется какая-нибудь RtlCopyMemory.


Дата: Сен 19, 2003 17:38:00

А в NT hmemcpy вообще нет, там, наверное, применяется какая-нибудь RtlCopyMemory.

Нет, в НТ вобще не используются внешние функции - копирование памяти просто инлайнится в код для скорости.


Дата: Сен 19, 2003 22:10:22

ssx

Да ну знаю я, что напрямую она не применяется и что в NT её вообще нету... Я ж чего и говорю - аналог...

hmemcpy вызывается из GetWindowText ... Можно подумать, что hmemcpy только с ней и вызывается... Ну, да ладно.

Вообщем я хотел сказать, что когда не работает ни GetWindowText, ни GetDlgItemText, ни SendMessage(WM_GETTEXT ...) и вообще ни #уя :), тогда то и работает...


Дата: Окт 31, 2003 22:49:59

Не пашут ни бряки на
GetWindowText, ни GetDlgItemText, ни SendMessage(WM_GETTEXT ...) и не пашет CallWindowProcA

И что делать ??


Дата: Ноя 1, 2003 17:25:44

sl0n

У тебя есть прога, которая читает текст с контрола и при этом эти бряки не работают? Это ведь можно делать по разному... ну, получает сообщение WM_CHAR, а там складывает вводимую строку по буквам... или что-то вроде этого... Скинь мне на мыло прогу, попробую посмотрю что там для интереса...


Дата: Ноя 1, 2003 19:32:51

мож немного не в тему, а поставить бряку на GetMessage\PeekMessage религия не позволяет?
Либо на WindowProc объекта бряку поставить?


Дата: Ноя 1, 2003 19:35:11

У тебя есть прога, которая читает текст с контрола и при этом эти бряки не работают? Это ведь можно делать по разному... ну, получает сообщение WM_CHAR, а там складывает вводимую строку по буквам...
Да ну... Как щас помню были LMD Tools в мои дельфевые временя - там многие контролы рисовались ручками, а не использовался сабклассинг. И там можно все сделать вообще в обход окошечных сообщений (кое где я так и делаю)


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.081