Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Послать сообщение из своей программе в чужую 
:(
    Опции темы
Toska
Дата 15.10.2007, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 9.5.2007

Репутация: нет
Всего: нет



Все еще актуально 
PM MAIL   Вверх
MetalFan
Дата 15.10.2007, 22:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 16
Всего: 128



Цитата(Toska @  12.10.2007,  18:12 Найти цитируемый пост)
SendMessage(EditWnd, WM_Paste, 0, Integer(PChar(Text))) 

ерунда какая-то.
оба параметра у WM_PASTE Not used; must be zero. 


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Toska
Дата 15.10.2007, 23:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 9.5.2007

Репутация: нет
Всего: нет



MetalFan, Ну да, действительно, это  от моих эксперементов осталось. Но работает!

Может подскажешь по лучше решение?
PM MAIL   Вверх
RA
Дата 16.10.2007, 02:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Брутальный буратина
****


Профиль
Группа: Участник Клуба
Сообщений: 3497
Регистрация: 31.3.2002
Где: Лес

Репутация: 7
Всего: 115



Отправлять текст  WM_SetText забирать WM_GETTEXT но нужно кое что учитывать:

При отправке текста WParam должен быть равен длинне отправляемого текста, иначе RV текст не примет.
Пример:

Код

SendMessage(RichViewEdit1.Handle, WM_SetText, Length(edit1.text)+1, Lparam(edit1.text) );




Забор текста осуществляется за счёт WM_GETTEXT но опять таки нужно учитывать WPARAM который указывает на длину копируемого текста, и получается при помощи WM_GETTEXTLENGTH

Пример:
Код

var
TextCount :integer;
buf : array [1..250] of char;
begin

    TextCount:= SendMessage(RichViewEdit1.Handle, WM_GETTEXTLENGTH, 0, 0);
    SendMessage(RichViewEdit1.Handle, WM_GETTEXT, TextCount, integer(@buf));
    Memo1.text:= buf;



Для того что бы текст вырывать кусками существует
EM_GETTEXTRANGE  lparam которого указывает на начало копирования 

Пример:
Код

var
 buf : array [1..250] of char;
begin
SendMessage(RichViewEdit1.Handle, EM_GETTEXTRANGE, integer(@buf), 10 );
Memo1.text:= buf;









Это сообщение отредактировал(а) RA - 16.10.2007, 02:38
PM   Вверх
MetalFan
Дата 16.10.2007, 09:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 16
Всего: 128



RA, все конечно хорошо, но контрол, на сколько я понял, находится в другом процессе. соотв в лучшем случае ничего из вышеприведенного не сработает, в худшем - AV либо в своем, либо в чужом приложении...


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
dumb
Дата 16.10.2007, 11:13 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 7
Всего: 158



Цитата(MetalFan @  16.10.2007,  10:43 Найти цитируемый пост)
контрол, на сколько я понял, находится в другом процессе
а посему - сначала выделить кусок памяти в АП другого процесса(VirtualAllocEx), скопировать туда строку(WriteProcessMemory) и потом слать сообщение. smile
PM MAIL   Вверх
MetalFan
Дата 16.10.2007, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 16
Всего: 128



Цитата(dumb @  16.10.2007,  11:13 Найти цитируемый пост)
а посему

+ сначала через OpenProcess получить доступ... после также не забыть освободить память ну и  CloseHandle тож не помешает


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
MetalFan
Дата 16.10.2007, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 16
Всего: 128



вот примерчик работы с чужим процессом. очень мне понравился


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
RA
Дата 16.10.2007, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Брутальный буратина
****


Профиль
Группа: Участник Клуба
Сообщений: 3497
Регистрация: 31.3.2002
Где: Лес

Репутация: 7
Всего: 115



Цитата(MetalFan @  16.10.2007,  09:43 Найти цитируемый пост)
все конечно хорошо, но контрол, на сколько я понял, находится в другом процессе. соотв в лучшем случае ничего из вышеприведенного не сработает, в худшем - AV либо в своем, либо в чужом приложении... 


 smile  Батенька хотите верьте хотите нет но мой пример работает.
Проверено!

PS: Я исходник этого компонента смотрел в области обработки вышеупомянутых мессаг.

Это сообщение отредактировал(а) RA - 16.10.2007, 15:59
PM   Вверх
MetalFan
Дата 16.10.2007, 16:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 16
Всего: 128



Цитата(RA @  16.10.2007,  15:56 Найти цитируемый пост)
Батенька хотите верьте хотите нет но мой пример работает.
Проверено!

работает, если RV создан и находится в ТВОЕМ приложении


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
RA
Дата 16.10.2007, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Брутальный буратина
****


Профиль
Группа: Участник Клуба
Сообщений: 3497
Регистрация: 31.3.2002
Где: Лес

Репутация: 7
Всего: 115



Цитата(MetalFan @  16.10.2007,  16:06 Найти цитируемый пост)
работает, если RV создан и находится в ТВОЕМ приложении 


А также в чужом
PM   Вверх
Alix
Дата 16.10.2007, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


L45
**


Профиль
Группа: Участник
Сообщений: 581
Регистрация: 4.5.2005
Где: Pskov/Spb

Репутация: 3
Всего: 23



Цитата(MetalFan @  16.10.2007,  17:06 Найти цитируемый пост)
работает, если RV создан и находится в ТВОЕМ приложении 

WM_SETTEXT для любого окна в принципе работала всегда. RA, прав.


--------------------
Знание только тогда знание, когда оно приобретено усилиями своей мысли, а не памятью (с) Л. Толстой
High tech. Low live. (с) Gardner Dozois
PM MAIL ICQ Skype   Вверх
MetalFan
Дата 16.10.2007, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 16
Всего: 128



Цитата(RA @  16.10.2007,  16:10 Найти цитируемый пост)
А также в чужом

уверен? надо проверить...


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
dumb
Дата 16.10.2007, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 7
Всего: 158



Цитата(RA @  16.10.2007,  16:56 Найти цитируемый пост)
Батенька хотите верьте хотите нет но мой пример работает.
хех. то-то я думаю, что где-то что-то уже на эту тему видел... для некоторой пачки сообщений(в основном это LB_xxx/CB_xxx) ядро самостоятельно копирует данные при передаче между процессами. и WM_SETTEXT/WM_GETTEXT в их числе... smile
так что мы описали общую методику работы с чужими контролами... smile
PM MAIL   Вверх
Toska
Дата 16.10.2007, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 9.5.2007

Репутация: нет
Всего: нет



Проверьте пожалуйста, ни чего не получается!!!

Добавлено через 6 минут и 9 секунд
Код

procedure TForm1.Button3Click(Sender: TObject);
var
  h,EditWnd: HWND;
begin
  h := findwindow(nil, 'Form1');
  EditWnd := FindWindowEx(h,0,'TRichViewEdit', nil);
  if EditWnd = 0 then begin
                                 ShowMessage('Окно НЕ найдено');
                                 exit;
  end;
SendMessage(EditWnd, WM_SetText, Length(edit1.text)+1, Lparam(edit1.text) );

end;


По этой кнопке должно отправляться сообщение находящиеся в Edit, правильно понял?

Неработает
PM MAIL   Вверх
Страницы: (4) Все 1 [2] 3 4 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0952 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.