Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.02.18;
Скачать: CL | DM;

Вниз

Передача сообщения своей программе   Найти похожие ветки 

 
ikar   (2001-12-19 10:10) [0]

Как передать сообщение своего формата, в свою программу, из DLL который загружает эта-же программа?


 
Dimka Maslov   (2001-12-19 10:38) [1]

SendMessage, PostMessage


 
nikkie   (2001-12-19 12:05) [2]

а нужно ли здесь сообщение? может через callback-функцию?


 
ikar   (2001-12-19 13:06) [3]

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


 
nikkie   (2001-12-19 13:52) [4]

почему нельзя? можно. только сообщения шлются окнам, а ты про окна ничего не говоришь - может у тебя программа консольная-безоконная... Dimka Maslov тебе правильно сказал - если у тебя есть окно и оно это сообщение обрабатывает.

теоретически, если цикл обработки сообщений ты сам писал, то можно и без окна - PostThreadMessage.

но часто делают по-другому - в функцию DLL передают указатель на функцию в теле программы.

вот только непонятно, что ты написал про потоки - данные из одного потока в другой надо передать? тогда через message проще будет наверное.


 
Dimaond Cat   (2001-12-20 00:59) [5]

Сообщения шлются не окнам (это лишь картинка), а обработчикам.
Если колличество данных небольшое, то логично использовать сообщения. если же передавать приходиться много или в разные процессы, то лучше использовать файл отображенный в память CreateFilemapping, могу поделиться и примером.


 
ikar   (2001-12-20 08:45) [6]

Программа устанавливает системную ловушку на клавиатуру, она зашита в DLL.
Если я просто буду вызывать из ловушки свою функцию(которая много чего делает и долго), боюсь тогда я тормозну обработку клавиатуры системой, т.к. последующие обработчики вызываться не будут. Если есть мысли как это обойти(кроме тех которые я уже спросил), буду признателен за помощть.


 
nikkie   (2001-12-20 10:05) [7]

>Dimaond Cat
>Сообщения шлются не окнам (это лишь картинка), а обработчикам
ты сам понимаешь, что говоришь? какая картинка, какие такие обработчики? а HWND в SendMessage - это тоже картинка?

>ikar
чем дальше в лес, тем более интересные подробности выясняются. проблема в том, что в момент срабатывания системный хук в dll находится в адресном пространстве другого процесса.

если ты посмотришь параметры SendMessage и PostMessage - есть два 4 байтовых параметра wParam и lParam. если тебе достаточно передать в твоем сообщении 2 числа - очень хорошо, если же тебе надо передать бОльшую структуру данных, то передать указатель на нее через, скажем, wParam можно только внутри своего процесса - этот указатель в пространстве другого процесса смысла не имеет.

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

если не зацикливаться на сообщениях, то есть еще несколько способов ipc (inter-process communication): pipes, file mapping, sockets, com. вот только кажется, что некоторые (если не все) из этих способов будет тяжело использовать в системном хуке. я надеюсь, тебе все-таки 2 * 4 байта хватит...



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

Текущий архив: 2002.02.18;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.009 c
3-56973
Илья Лу.
2002-01-22 13:43
2002.02.18
trigger в Oracle


7-57233
neverbee
2001-11-13 14:32
2002.02.18
Подскажите как програмно можно выключить/включить Service?


1-57063
SLAYER1
2002-02-01 16:59
2002.02.18
Помогите плиз как из моей программы запустить существующий файл Excel с диска


4-57259
Art
2001-12-20 20:10
2002.02.18
Вопрос по Api??


6-57162
Диман
2001-11-28 12:14
2002.02.18
методы Socket и Connect (и т.п.) в модуле WinSock - как вызывать?