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

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

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 из сервиса - это круто


Наверх

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