![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
EM_CHARFROMPOS
Kerk © (2005-06-21 12:12:00)Вот такой код валит WordPad:
FirstPos := SendMessage(Hwnd,EM_CHARFROMPOS,0,Integer(@Pt));
Копчиком чувствую, что проблема в передаваемом указателе.
Неужели нет способа узнать номер символа под курсором RichEdit другого процесса?
Когда внедрял DLLку хуком, тот же код работал.
Google молчит. Яндекс дает ссылки на всякую хрень.
Digitman (2005-06-21 15:02:00) [1]
> Как прямее?
"прямее" будет "прямой" вариант
а "прямой" вариант - это целевое внедрение кода, т.е. внедрение в АП конкретного (а не всех подряд) процесса
глоб.хук же внедряет код в АП сразу множества процессов, вне зависимости от того, надо оно тебе или не надо
Eraser (2005-06-21 15:01:00) [2]Удалено модератором
Примечание: Offtopic
kaZaNoVa (2005-06-21 15:00:00) [3]Kerk © (21.06.05 14:57) [15]
имхо вариант с длл
Kerk (2005-06-21 14:57:00) [4]ОК. Все понятно.
Теперь надо выбрать между внедрением DLL хуком и вариантом предложенным в [11].
Как прямее? :)
Игорь Шевченко (2005-06-21 14:55:00) [5]Kerk © (21.06.05 14:37) [10]
> Понимаю все это. Но все же WM_GETTEXT как-то работает
WM_GETTEXT известен Windows, поэтому при обработке его и ряда других известных сообщений, Windows создает область разделяемой памяти, доступной всем приложениям, приложение, которое обрабатывает сообщение, копирует данные туда, а Windows уже скопированные данные перемещает в адресное пространство отправителя, и потом уничтожает область общей памяти.
Digitman (2005-06-21 14:55:00) [6]
> Kerk © (21.06.05 14:37) [10]
ну повалил я его ... и что ? ... вполне ожидаемый результат .. АП - чужое, и мой указатель там - как корове седло ..
Kerk (2005-06-21 14:48:00) [7]BiN © (21.06.05 14:46) [11]
VirtualAllocEx, WriteProcessMemory и иже с ними не пробовал?
О! Кстати мысль. Что-то я про них забыл.
BiN (2005-06-21 14:46:00) [8]Kerk © (21.06.05 14:37) [10]
Понимаю все это. Но все же WM_GETTEXT как-то работает.
Обидно.. EM_CHARFROMPOS для EDIT прокатывает (там без указателя), а для RICHEDIT - нет :(
VirtualAllocEx, WriteProcessMemory и иже с ними не пробовал?
Kerk (2005-06-21 14:37:00) [9]Игорь Шевченко © (21.06.05 14:28) [8]
Сам подумай, если указатель ссылается на адресное пространство чужого процесса, что при этом получится ?
Понимаю все это. Но все же WM_GETTEXT как-то работает.
Обидно.. EM_CHARFROMPOS для EDIT прокатывает (там без указателя), а для RICHEDIT - нет :(
Digitman © (21.06.05 14:31) [9]
ты не туда сообщение шлешь.
его надо слать самому RICHEDIT, а в твоем случае оно не обрабатывается вообще похоже
Digitman (2005-06-21 14:31:00) [10]и WordPad не валит.
конкретно - v5.0 , билд 2195, Винтукей SP4
pt я объявил локально в процедуре и никак не инициализирую
var
FirstPos: integer;
pt: integer;
begin
hwnd := findwindow(nil, 'Document - WordPad'); //окно гарантированно найдено
FirstPos := SendMessage(Hwnd,EM_CHARFROMPOS,0,Integer(@Pt));
ы ?
Игорь Шевченко (2005-06-21 14:28:00) [11]
> Копчиком чувствую, что проблема в передаваемом указателе.
Верно чувствуешь. Сам подумай, если указатель ссылается на адресное пространство чужого процесса, что при этом получится ?
Kerk (2005-06-21 14:16:00) [12]При посылке сообщения окну RICHEDIT приложение падает.
Kerk (2005-06-21 14:15:00) [13]Digitman © (21.06.05 14:10) [5]
WordPad !!!! а не Word
Digitman (2005-06-21 14:10:00) [14]
> Вот такой код валит WordPad:
>
> FirstPos := SendMessage(Hwnd,EM_CHARFROMPOS,0,Integer
именно такой код именно мой Ворд именно не "валит"
эни квешшнз ?
Игорь Шевченко (2005-06-21 13:44:00) [15]kaZaNoVa © (21.06.05 13:26) [3]
> попробуй заюзать что-нить типа разпознавания символов с
> экрана ..
"Микроэлемента ванадия больше всего в поганках, что вовсе не означает, будто их
надо есть."
(с) ХиЖ 8-1976
kaZaNoVa (2005-06-21 13:26:00) [16]Kerk © (21.06.05 13:23) [2]
попробуй заюзать что-нить типа разпознавания символов с экрана ..
Kerk (2005-06-21 13:23:00) [17]тьфу на тебя, извращенец! :))
kaZaNoVa (2005-06-21 13:22:00) [18]может попробовать внедрять не длл а код?