Текущий архив: 2007.02.11;
Скачать: CL | DM;
ВнизПосылать сообщения сервису Найти похожие ветки
← →
Dmitry_177 (2006-09-26 19:23) [0]Как посылать сообщения сервису из dll-библиотеки? Я знаю как это делать с обычной программой с окном, а вот тут я не знаю, подскажите пожалуйста...
Библиотека:
var
H: HWND
begin
H := FindWindow("Form1",nil);
if H <> 0 then
begin
SendMessage (H,WM_COPYDATA,0,Integer(@_Data)) <> 0;
...
Принцип простой, находим окно с заголовком и отправляем ему сообщение, а вот как отправить сервису, он же без окна?
← →
clickmaker © (2006-09-26 19:29) [1]ControlService()
← →
Dmitry_177 (2006-09-26 19:36) [2]Я как понял это передает в сервис какоюнибудь команду и т.д. чтобы сервис это выполнил, я бы хотел просто свое значение передавать из библиотеки...
← →
Сергей М. © (2006-09-26 20:55) [3]Чем "команда" отличается от "значения" ?
> передавать из библиотеки
Передача с Луны чем-то отличается от передачи "из библиотеки" ?
← →
Leonid Troyanovsky © (2006-09-26 20:59) [4]
> Dmitry_177 (26.09.06 19:23)
> ему сообщение, а вот как отправить сервису, он же без окна?
Есть сервисы с окнами.
> т.д. чтобы сервис это выполнил, я бы хотел просто свое значение
> передавать из библиотеки...
А что, библиотека загружена не сервисом?
Если же он ее загрузил, то, видимо, знает, как _получить_
необходимое у оной.
--
Regards, LVT.
← →
Dmitry_177 (2006-09-26 20:59) [5]Мне нужно передавать в сервис коды клавишь, которые ловятся в хуке библиотеки...
← →
Dmitry_177 (2006-09-26 21:01) [6]P.S. Это не шпион!
← →
Leonid Troyanovsky © (2006-09-26 21:03) [7]
> Dmitry_177 (26.09.06 20:59) [5]
> Мне нужно передавать в сервис коды клавишь, которые ловятся
> в хуке библиотеки...
Нормальный сервис даже не должен подозревать о
существовании неких клавиш.
Т.е., любой сервис должен уметь работать на сервере,
у которого отсутствует клавиатура, мышь и т.п.
--
Regards, LVT.
← →
Leonid Troyanovsky © (2006-09-26 21:05) [8]
> Dmitry_177 (26.09.06 21:01) [6]
> P.S. Это не шпион!
А мы морально-этические проблемы и не касались.
Bad design only.
--
Regards, LVT.
← →
Dmitry_177 (2006-09-26 21:08) [9]
> Leonid Troyanovsky © (26.09.06 21:03) [7]
Всеже мне нужно каким то образом передавать эти значения... Как это реализовать?
← →
Leonid Troyanovsky © (2006-09-26 21:11) [10]
> Dmitry_177 (26.09.06 21:08) [9]
> Всеже мне нужно каким то образом передавать эти значения.
> .. Как это реализовать?
Как обычно.
Клиент, работающий интерактивно, передает необходимую сервису
информацию при посредстве tcp/ip, named pipes & etc.
--
Regards, LVT.
← →
Dmitry_177 (2006-09-26 21:16) [11]сервис обычный, Application Service, служба windows )))
← →
Leonid Troyanovsky © (2006-09-26 21:18) [12]
> Dmitry_177 (26.09.06 21:16) [11]
> сервис обычный, Application Service, служба windows )))
Тем более.
--
Regards, LVT.
← →
Dmitry_177 (2006-09-27 00:54) [13]А как передавать сообщение то?
← →
Игорь Шевченко © (2006-09-27 10:03) [14]
> А как передавать сообщение то?
http://www.delphimaster.ru/articles/named_pipes/index.html
← →
Alex Konshin © (2006-09-27 12:12) [15]> Игорь Шевченко © (27.09.06 10:03) [14]
> > А как передавать сообщение то?
> http://www.delphimaster.ru/articles/named_pipes/index.html
Если человек хочет посылать/получать Windows message (WM_*), то зачем named pipes, tcp и т.п.? Можно же посылать как обычно. Важно просто знать, что для получения сообщений Windows не нужно иметь окно, а нужно иметь очередь сообщений. Чтобы какая-то нить заимела очередь сообщений достаточно попытаться читать эти сообщения - очередь автоматом будет создана. Чтобы ждать сообщения в какой-то нити, рекомендую ждать по функции MsgWaitForMultiple...(полное имя не помню на вскидку, а искать лень), и толко в случае сообщения его читать из очереди. Почему имено эту функцию? А потому, что можно там же ждать и других событий.
← →
Игорь Шевченко © (2006-09-27 12:34) [16]Alex Konshin © (27.09.06 12:12) [15]
А сообщения через разные десктопы можно передавать ?
← →
isasa © (2006-09-27 21:42) [17]PostThreadMessage ?
← →
Eraser © (2006-09-27 23:20) [18]> [17] isasa © (27.09.06 21:42)
из описания ф-ии PostThreadMessage в MSDN:Windows 2000/XP: This thread must either belong to the same desktop as the calling thread or to a process with the same locally unique identifier (LUID). Otherwise, the function fails and returns ERROR_INVALID_THREAD_ID.
← →
Fay © (2006-09-28 16:01) [19]2 Игорь Шевченко © (27.09.06 12:34) [16]
А разве нельзя? (не проверял)
Страницы: 1 вся ветка
Текущий архив: 2007.02.11;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.047 c