Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

не получается послать сообщение другому приложению.


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;


Наверх

Титульная страница Поиск, карта сайта Написать письмо