![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
не получается послать сообщение другому приложению.
Duncann © (2003-11-04 11:37:00)
У меня есть одна программа сервис под 2000, и другая которая в случае если запущена, то должна принимать сообщения от этой самой программы-сервиса.
Код программы сервиса:
const WM_MSG = WM_USER+2;
...
procedure TsvcServiceBase.ttTimer(Sender:TObject);
var Ini:TiniFile;
Thr:integer;
begin
ini:=TiniFile.Create(ExtractFilePath(ParamStr(0))+"SvComEx22.Dat");
Thr:=ini.ReadInteger("Threads","SendId",0);
if Thr>0 then PostThreadMessage(Thr,WM_MSG,0,0);
ini.Free;
end;
Причем сообщение точно уходят т.к. на if PostThreadMessage() выдает true. А вот код программы принимающей.
Const WM_MSG=WM_USER+2;
...
public procedure GetMessage(var message :TMessage); message WM_MSG;
...
procedure TForm1.GetMessage(var message:TMessage);
begin
ShowMessage("ok");
M.Lines.Add(TimeToStr(Time)+" "+IntToStr(message.WParam)+" "+InTToStr(message.LParam));
end;
Ну и в итоге ничего не выдается... В чем проблема?
Duncann (2003-11-04 13:39:00) [1]
СПАСИБО!!!!
Это помогло :-)
Игорь Шевченко (2003-11-04 13:07:00) [2]
Только что обратил внимание на использование PostThreadMessage.
Это сообщение не будет обработано оконной процедурой формы.
Может, имеет смысл передавать Handle окна формы, а не идентификатор потока ? И в сервисе вызывать PostMessage, а не PostThreadMessage ?
Duncann (2003-11-04 11:53:00) [3]
Да, галочка стоит.
Игорь Шевченко (2003-11-04 11:42:00) [4]
У сервиса в настройках разрешено взаимодействие с рабочим столом ?
Duncann (2003-11-04 11:38:00) [5]
Да и забыл написать процедурку которая пишет в ини файл номер нити.
procedure TForm1.FormActivate(Sender: TObject);
var ini:TIniFile;
begin
Ini:=TIniFile.Create(ExtractFilePath(ParamStr(0))+"SvComEx22.dat");
ini.WriteInteger("Threads","SendId",GetCurrentThreadId);
Ini.Free;
end;