Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2005.08.14;
Скачать: [xml.tar.bz2];

Вниз

EM_CHARFROMPOS   Найти похожие ветки 

 
Kerk ©   (2005-06-21 12:12) [0]

Вот такой код валит WordPad:

FirstPos := SendMessage(Hwnd,EM_CHARFROMPOS,0,Integer(@Pt));

Копчиком чувствую, что проблема в передаваемом указателе.
Неужели нет способа узнать номер символа под курсором RichEdit другого процесса?

Когда внедрял DLLку хуком, тот же код работал.

Google молчит. Яндекс дает ссылки на всякую хрень.


 
kaZaNoVa ©   (2005-06-21 13:22) [1]

может попробовать внедрять не длл а код?


 
Kerk ©   (2005-06-21 13:23) [2]

тьфу на тебя, извращенец! :))


 
kaZaNoVa ©   (2005-06-21 13:26) [3]

Kerk ©   (21.06.05 13:23) [2]
попробуй заюзать что-нить типа разпознавания символов с экрана ..


 
Игорь Шевченко ©   (2005-06-21 13:44) [4]

kaZaNoVa ©   (21.06.05 13:26) [3]


> попробуй заюзать что-нить типа разпознавания символов с
> экрана ..


"Микроэлемента ванадия больше всего в поганках, что вовсе не означает, будто их
надо есть."
(с) ХиЖ 8-1976


 
Digitman ©   (2005-06-21 14:10) [5]


> Вот такой код валит WordPad:
>
> FirstPos := SendMessage(Hwnd,EM_CHARFROMPOS,0,Integer


именно такой код именно мой Ворд именно не "валит"
эни квешшнз ?


 
Kerk ©   (2005-06-21 14:15) [6]

Digitman ©   (21.06.05 14:10) [5]

WordPad !!!! а не Word


 
Kerk ©   (2005-06-21 14:16) [7]

При посылке сообщения окну RICHEDIT приложение падает.


 
Игорь Шевченко ©   (2005-06-21 14:28) [8]


> Копчиком чувствую, что проблема в передаваемом указателе.


Верно чувствуешь. Сам подумай, если указатель ссылается на адресное пространство чужого процесса, что при этом получится ?


 
Digitman ©   (2005-06-21 14:31) [9]

и 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));

ы ?


 
Kerk ©   (2005-06-21 14:37) [10]

Игорь Шевченко ©   (21.06.05 14:28) [8]
Сам подумай, если указатель ссылается на адресное пространство чужого процесса, что при этом получится ?


Понимаю все это. Но все же WM_GETTEXT как-то работает.
Обидно.. EM_CHARFROMPOS для EDIT прокатывает (там без указателя), а для RICHEDIT - нет :(

Digitman ©   (21.06.05 14:31) [9]

ты не туда сообщение шлешь.
его надо слать самому RICHEDIT, а в твоем случае оно не обрабатывается вообще похоже


 
BiN ©   (2005-06-21 14:46) [11]

Kerk ©   (21.06.05 14:37) [10]
Понимаю все это. Но все же WM_GETTEXT как-то работает.
Обидно.. EM_CHARFROMPOS для EDIT прокатывает (там без указателя), а для RICHEDIT - нет :(


VirtualAllocEx, WriteProcessMemory и иже с ними не пробовал?


 
Kerk ©   (2005-06-21 14:48) [12]

BiN ©   (21.06.05 14:46) [11]
VirtualAllocEx, WriteProcessMemory и иже с ними не пробовал?


О! Кстати мысль. Что-то я про них забыл.


 
Digitman ©   (2005-06-21 14:55) [13]


> Kerk ©   (21.06.05 14:37) [10]


ну повалил я его ... и что ? ... вполне ожидаемый результат .. АП - чужое, и мой указатель там - как корове седло ..


 
Игорь Шевченко ©   (2005-06-21 14:55) [14]

Kerk ©   (21.06.05 14:37) [10]


> Понимаю все это. Но все же WM_GETTEXT как-то работает


WM_GETTEXT известен Windows, поэтому при обработке его и ряда других известных сообщений, Windows создает область разделяемой памяти, доступной всем приложениям, приложение, которое обрабатывает сообщение, копирует данные туда, а Windows уже скопированные данные перемещает в адресное пространство отправителя, и потом уничтожает область общей памяти.


 
Kerk ©   (2005-06-21 14:57) [15]

ОК. Все понятно.
Теперь надо выбрать между внедрением DLL хуком и вариантом предложенным в [11].
Как прямее? :)


 
kaZaNoVa ©   (2005-06-21 15:00) [16]

Kerk ©   (21.06.05 14:57) [15]
имхо вариант с длл


 
Eraser ©   (2005-06-21 15:01) [17]

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


 
Digitman ©   (2005-06-21 15:02) [18]


> Как прямее?


"прямее" будет "прямой" вариант

а "прямой" вариант - это целевое внедрение кода, т.е. внедрение в АП конкретного (а не всех подряд) процесса

глоб.хук же внедряет код в АП сразу множества процессов, вне зависимости от того, надо оно тебе или не надо



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2005.08.14;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.013 c
1-1122406485
Michael5
2005-07-26 23:34
2005.08.14
Компонент TTreeView: как выровнять по левому краю некоторые узлы?


14-1122285961
wnew_
2005-07-25 14:06
2005.08.14
Отпуск!!!


1-1122368068
dddim
2005-07-26 12:54
2005.08.14
winexec


3-1120800837
Holy
2005-07-08 09:33
2005.08.14
Установка BDE с помощью InnoSetup


8-1107820750
fxt
2005-02-08 02:59
2005.08.14
Потоковое видео





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский