![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Service и Handle [D6, Win2k]
Yogi © (2002-12-14 14:10:00)Приветствую! Продолжая заморачиваться с сервисами (службами), столкнулся со следующим вопросом: насколько я себе представляю, service application не имеет handle. Как же тогда вызывать функции API, требующие в качестве параметра handle? Например, как вызвать messagebox?
Саня (2003-04-23 18:27:00) [1]А у меня другой вопрос... Как в сервисе отлавливать сообщения Windows, посланные SendMessage или подобным... Оконная форма не помогает
Jack666 (2003-03-25 18:05:00) [2]Все из реально работающего сервиса:
1. MessageBox из сервиса легко работает, кто бы что не говорил:
Пример:
MessageBox(0,PChar(Exception(ExceptObject).Message),PChar(sCaption), MB_SERVICE_NOTIFICATION or MB_ICONSTOP);
2. Работает и это без проблем:
ShowMessage("Hello from service!!!");
3. Настройка параметров сервиса - тоже нет проблем:
procedure TATSService.ServiceStart(Sender: TService; var Started: Boolean);
begin
CheckStartupParameters;
SetConnectionString;
Init;
Started := True;
end;
где
procedure TATSService.CheckStartupParameters;
begin
if ParamCount > 1 then begin
if CompareText(sPortConfigParameter, Param[1]) = 0 then begin
SetupComPort := TSetupComPort.Create(ATSService);
try
SetupComPort.ShowModal;
finally
SetupComPort.Free;
end;
end
else if CompareText(sHelpParameter, Param[1]) = 0 then begin
MessageBox(0, PChar(sHelp), PChar(sCaption), MB_SERVICE_NOTIFICATION or MB_ICONINFORMATION);
end
else if CompareText(sAboutParameter, Param[1]) = 0 then begin
MessageBox(0, PChar(sAuthor), PChar(sCaption), MB_SERVICE_NOTIFICATION or MB_ICONINFORMATION);
end else
MessageBox(0, PChar(sBadParameter), PChar(sCaption), MB_SERVICE_NOTIFICATION or MB_ICONWARNING);
end;//if
end;
Тут вот исчо шо... параметры (к примеру -р -н и пр.) должен задавать в Service Control Panel и не закрывая окошка парамеров рестартовать сервис.
И последнее. Прежде чем все это делать, хорошо подумай, а нужна ли тебе ТАКАЯ интерактивность. Вариант с логами мне кажется лучче...
Игорь Шевченко (2003-03-20 09:23:00) [3]Не работает
qsecofr (2003-03-19 21:17:00) [4]А вопросик можно? Тип сервиса stDevice вообще в Delphi работает?
Просто нигде не получается найти хотя-бы маааааахонький примерчик, а по аналогии с WIN32 сервисом не получается...
Может есть у кого ссылки...
Заранее спасибо.
Hidrogen (2003-02-28 08:35:00) [5]Смотри
..\Delphi6\Source\Vcl\ScktSrvr.dpr
Vasily Terekhov (2003-01-24 14:16:00) [6]хендл есть
получить можно через FindWindow("TApplication","<Имя exe>")
BSD (2003-01-24 09:43:00) [7]Используй MessageBox(Ex) с флагом MB_SERVICE_NOTIFICATION, и диалоговое окно отобразится в любои случае (даже если не включен Interract With Desktop).
Cobalt (2003-01-24 09:26:00) [8]2 Yogi
Хэндлы бывают разные,
Черные, белые, красные.
Но всем почему-то хочется
Над ними заморочиться?!
P.S. (К Yogi) что такое хэндл?
Chubais (2003-01-24 09:16:00) [9]Reindeer Moss Eater (14.12.02 14:15)
MessageBox из сервиса - это круто
!!!!!!!!!!
Reindeer Moss Eater (2003-01-24 08:37:00) [10]AVP Control Center это сервис???
andrews (2003-01-24 08:33:00) [11]К вопросу о плохой совместимости GUI и сервиса. Как например AVP Control Center?
asmith (2002-12-14 17:22:00) [12]Посмотри на сервисные компоненты Винды - практически нигде нит интерактивности. Хотя это в принципе возможно-разрешить ему взаимодействовать с оболочкой. Если твоя проблема-задание параметров работы сервиса-напиши апликуху MyService Manager, пусть она, напрмер, болтается в трее, легко доступна юзеру и позволяет править настроечные параметры из реестра или базы. Изменил параметры, перезаписал, рестартовал сервис, а он при старте считал настройки и сменил поведение. Если нужно следить за выходными данными сервиса-организуй лог и пиши в него, или, что еще лучше, заведи себе ветку в Application Event Log. Можно также наделить сервис свойствами СОМ-сервера и обращаться к нему из любого клиента, поддерживающего скриптинг. Но в любом случае сервис и GUI-вещи плохо совмещающиеся.
RAA (2002-12-14 16:36:00) [13]Вот лично я сейчас пишу две программки вида сервис и проблемм с messagebox у меня не возникало(!))) А вот как создать форму без подключения модуля forms вот это уже задача(!)))
Причём размер моей программки 18 kb(!)))
Reindeer Moss Eater (2002-12-14 14:15:00) [14]MessageBox из сервиса - это круто