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

Вниз

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

 
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 вся ветка

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

Наверх




Память: 0.47 MB
Время: 0.004 c
4-57267
Витамин
2001-12-18 13:05
2002.02.18
Текст в SysTray...


3-57009
Fran
2002-01-24 09:59
2002.02.18
Как в RXDBGrid текущию строку сделать с другим Font или цветом?


3-57013
Kirill
2002-01-24 16:56
2002.02.18
Дублирующиеся записи в SQL Server


1-57040
Иванов Юрий
2002-02-01 11:53
2002.02.18
Дамы и Господа! Помогите! Как получить список директорий в директории


3-56984
vopros
2002-01-22 13:23
2002.02.18
Out of Date





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