| Посл.ответ |
Сообщение |
|
Создано: 1 октября 2007 23:59:12 Личное сообщение #1
Здравствуйте.
Собственно к вопросу:
Как мне из СВОЕЙ программы послать сообщение ДРУГОЙ программе на класс компонета TRichViewEdit?
А так же как считать от туда данные?
|
|
|
Создано: 13 октября 2007 08:56:29 Личное сообщение #2
AVE пишет:
Теперь остался вопрос как считать от туда данные
GetWindowText не пробовал?
----- Security through obscurity is just an illusion
|
|
Создано: 13 октября 2007 14:06:53 · Поправил: intro Личное сообщение #3
AVE
а тут --> http://www.trichview.com/forums <-- не судьба поискать?  официальный форум поддержки компонента. учись искать инфу сам. там точно есть ответ на вопрос про чтение данных. ищи.
и ещё, кстати, вот:
Veliant пишет:
в общем по f2 считывает в квипе набранный текст и его транслит вбивает на его место...там тоже используется TRichViewEdit.....сорри что комментов нет...так для ради интереса пробывал делать=)
посмотри как там происходит считывание данных
|
|
Создано: 13 октября 2007 19:36:41 Личное сообщение #4
intro да пробывал я все
|
|
Создано: 13 октября 2007 22:07:30 Личное сообщение #5
SendMessage(Window,WM_GETTEXT,1024,LPARAM(@nm)); вот так считывается отлично
|
|
Создано: 13 октября 2007 23:56:14 Личное сообщение #6
Veliant Боюсь уже что либо спрашивать
что за параметр (@nm)?
|
|
Создано: 14 октября 2007 00:03:27 · Поправил: Isaev Личное сообщение #7
AVE пишет:
что за параметр (@nm)?
Странный вопрос... Очевидно адрес переменной, куда считывать значение
Или где ты собираешься результат искать?
----- xOAg8vsg7/Du8fLuIOPl7ejpISEhIDsp |
|
Создано: 14 октября 2007 00:27:55 Личное сообщение #8
Подскажите что не верно, тип для nm правильно указал?
Как считать данные в memo
var
h,EditWnd: HWND;
nm : Integer;
begin
h := findwindow(nil, 'Form1');
EditWnd := FindWindowEx(h,0,'TRichViewEdit', nil);
if EditWnd = 0 then exit;
Memo1.Text := IntToStr(SendMessage(EditWnd,WM_GETTEXT,1024,LPARAM(@nm)));;
end;
|
|
Создано: 14 октября 2007 06:38:39 Личное сообщение #9
nm - это должен быть указатель на массив символов, куда положить данные, а у тебя это указатель на целую переменную.
ппц, справку в MSDN читал?
И куда проще было воспользоваться GetWindowText
var
buf: array[0..1023] of char;
begin
GetWindowText(EditWnd, @buf, 1024);
end;
----- Security through obscurity is just an illusion
|
|
Создано: 14 октября 2007 08:55:47 Личное сообщение #10
так тоже не работает:
h,EditWnd: HWND;
nm : array[0..1023] of char;
begin
h := findwindow(nil, 'Form1');
EditWnd := FindWindowEx(h,0,'TRichViewEdit', nil);
if EditWnd = 0 then exit;
SendMessage(EditWnd,WM_GETTEXT,1024,LPARAM(@nm));
Memo1.Lines.Add(nm);
|
|
Создано: 14 октября 2007 14:40:34 Личное сообщение #11
Veliant по моему WM_GETTEXT не подходит, ведь там может быть и картинка какая нибудь?
|
|
Создано: 15 октября 2007 07:44:10 Личное сообщение #12
ведь там может быть и картинка какая нибудь?
Тогда делай BitBlt.
----- Security through obscurity is just an illusion
|
|
Создано: 15 октября 2007 23:50:58 Личное сообщение #13
Все еще актуально, но BitBlt думаю здесь мало умесно
|
|
Создано: 16 декабря 2007 16:42:09 · Поправил: SnikerS Личное сообщение #14
Да уж... Я то думал что форумы нужны чтоб делиться информацией и опытом...
Ну да ладно. О великие гении!!! Помогите бедному, начинающему программисту в таком вопросе:
LRESULT SendMessage(
HWND hWnd,
UINT Msg,
WPARAM wParam,
LPARAM lParam
);
hWnd - ну он и в Африке хэндл
Msg
[in] Specifies the message to be sent.
wParam
[in] Specifies additional message-specific information.
lParam
[in] Specifies additional message-specific information.
Меня интересуют эти параметры: Msg, wParam, lParam
Раскажите плиз по всем трем. Какой магией вы пользуетесь чтоб узнать что в эти параметры записывать чтоб считать данные с чужой проги.
Пример: SendMessage(EditWnd,WM_GETTEXT,1024,LPARAM(@nm));
WM_GETTEXT - бывают же всякие разные месаги, в том числе и самописные. Как их-то узнать?
1024 - это вообще ставит в тупик... Всегда 0 использовал.
LPARAM(@nm)-это понял почему, но мне кажется если Msg будет другой то обом...
П.С.: Если вас воротит от тупости вопроса и не компетентности автора - плиз, воздержитесь от ответа
|
|
Создано: 16 декабря 2007 17:52:37 Личное сообщение #15
SnikerS
Если в общих чертах, то Msg - сообщение, посылаемое окну, а wParam и lParam - сопровождающие конкретное сообщение параметры (могут быть равны нулю): подробнее можно узнать в MSDN.
----- Если тебя обсуждают за спиной, значит ты впереди! |
|
Создано: 16 декабря 2007 21:10:50 Личное сообщение #16
Вот описание:
function SendMessage(Wnd: HWnd; Msg, wParam: Word; lParam: Longint): Longint;
Посылает сообщение оконной функции указанного окна. Возвpат из функции
осуществляется только после обpаботки сообщения.
Wnd: Окно, пpинимающее сообщение или $FFFF для посылки всем всплывающим
окнам в системе.
Msg: Тип сообщения.
wParam: Дополнительная инфоpмация о сообщении.
lParam: Дополнительная инфоpмация о сообщении.
Возвpащаемое значение:
Значение, возвpащенное пpинимающей оконной функцией.
Я знаю тока такой способ
|
|
Создано: 16 декабря 2007 21:15:22 Личное сообщение #17
14-15 уроки Iczelion'а
|
|
Создано: 17 декабря 2007 00:30:56 · Поправил: SnikerS Личное сообщение #18
k2007 пишет:
function SendMessage(Wnd: HWnd; Msg, wParam: Word; lParam: Longint): Longint;
Спасибо конечно, но я и по англ. читать умею... То что я написал выше из MSDN по англ., то что ты написал - тоже самое только по русски.
А вот если бы ты описал с примерами все значения этих параметров:
wParam: Дополнительная инфоpмация о сообщении.
lParam: -//-.
Т.е. какие они бываю для каждого отдельного события(message).
P.S.: На самом деле мне уже не нужен ответ на этот вопрос. Буду делать по другому - с гемором - через ReadProcessMemory, т.к. сколько я не искал, к сожалению, ничего не нашел для решения своего проблемы.
|
|
Создано: 17 декабря 2007 14:13:50 Личное сообщение #19
>>То что я написал выше из MSDN по англ., то что ты написал - тоже самое только по русски.
Пардон не заметил!
|
|
Создано: 17 декабря 2007 15:07:30 · Поправил: Grom_ Личное сообщение #20
SnikerS
попробую обьяснить
если все расскрыть то получим
-Послать мессагу - вызвать функцию системы!
- Msg - тип int , по сути это просто КОД сообщения(функции), по нему разбор что те нуно от системы.
- wParam и lParam - это дополнительные параметры через которые ты передаешь нужные(для мессаги/функции) данные
, параметры эти DWORD следовательно , ты можешь туда впихнуть все что угодно , начиная от простого числа(тип) , заканчивая АДРЕСОМ массива или класса . Что туды пихать , это зависит от мессаги!!!!! (как она возмет данные и в качестве каких типов из wParam и lParam ), мессаги разные так же как и функции , не все же функции с одинаковыми параметрами. Для этого и сделали (как я думаю) универсально через DWORD.
А по твоему случаю нуно разбираться, как у тя текст для выдергивания устроен, может он действительно тупо рисуется и т.п. , в каком обьекте(класс) текст отображается.
З.Ы. Стандартные мессаги обрабатывают стандартные средства(обьекты) , или тех кто их поддерживает , а самопал может и не видеть твои мессаги
|
|
Создано: 21 декабря 2007 01:55:27 Личное сообщение #21
Я пытаюсь что-нибудь придумать с клиентом покерного рума.
Кое какие данные я беру с элементов которые находятся в окне.
А кое что выдергиваю из памяти.
Уже полностью управляю окном клиента из своей проги
В основном всю инфу нашел на специализированных по программированию сайтах. Но и вам спасибо тоже.
|
|
Создано: 21 декабря 2007 02:52:06 · Поправил: HiEndsoft Личное сообщение #22
Помниться у меня инета еще не было и документации оч. маловато, так вот я эти wParam и lParam через MS Spy добывал и смотрел что к чему. С инетом -то проще, но креатива меньше......и гемороя
----- I_m alcoholic |
|
Создано: 22 декабря 2007 15:27:00 Личное сообщение #23
AVE
Короче, тут уже много чего написано было (мне аж всё читать лень), так что начнём, собственно, с вопроса.
Послать сообщение из своей проги другой проге - это неправильное выражение, мы посылаем сообщение не проге, а окну, и нам в данном случае пофиг, какой проге/процессу/потоку оно принадлежит. Delphi - это тяжёлый случай, поэтому будем исходить из структуры окон в проге на делфях.
Вначале найдём главное окно, на котором находятся все компоненты - выражаясь нормально, через FindWindowA определим хэндл окна, которое будет являться родительским для всех компонентов формы.
В качестве параметров передаём только класс окна. Это канает, потому что класс формы уникален, но далее нам нужно будет работать со структурой дочерних элементов, к примеру, твой TRichViewEdit расположен на объекте класса TPanel,тогда через FindWindowExA и GetWindow ты дойдёшь до именно того объекта с классом TPanel, а потом опять вызовешь FindWindowExA + GetWindow, чтоб получить хэндл именно того TRichEdit, который тебе нужен, а далее посылай ему какие хочешь сообщения. Справка по API - в MSDN
----- Знающий |