>> Я тестирую прогу на Блокноте! И не работает!
>>
> Есть твоя прога. Так ? Ты открываешь блокнот. Да?
> Получаешь дескриптор одного из его окон (того, в котором текст),
> подсовываешь его в _своей_ проге в SendMessage(Handle, WM_GETTEXTLENGTH, ...
>
> Просто, если процессы разные (если до меня правильно дошло... что
> ты не из окна своего процесса пытаешься взять текст),
> то да - тебе текст не вернется.
>
Занятно. Читаю это обсуждение, вроде бы все сказано, даже цитаты
из документации приведены, а все не разберемся :)
Во-первых, согласно MSDN, если бы использовались функции
GetWindowText/GetWindowTextLength, текст окна из другого
процесса действительно не удалось бы взять. Для окна своего
процесса они используют WM_GETTEXT*, а для окон
других процессов явно дают заголовок, если он есть.
Во-вторых, несколько сообщений, имеющих в качестве параметра
буфер, включая WM_GETTEXT, все-таки можно посылать
окнам других процессов. Функция SendMessage сама обеспечит
передачу данных между процессами. Правда, если
процесс завис, Вашему потоку тоже каюк :(
Не сработало WM_GETTEXT для Блокнота скорее всего
потому, что приведенный код нашел не окно
редактора, а какое-то другое:
> h := GetNextWindow(h, GW_CHILD);
> i := GetWindowTextLength(h);
>
Надо бы устроить цикл с вызовом GetClassName.
Упоминания об ограничениях на размер буфера сообщения
при вызове между процессами что-то не нашел...
Номер выпуска : 4157
Возраст листа : 546 (дней)
Количество подписчиков : 528
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/336579
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru