Builder C++ Как программе узнать, что запущена другая программа?

markyzz

Ситуация следующая:
При включении винды автоматически запускается служба и работает.
Пользователь запускает некую программу. При этом запуске служба должна отреагировать (именно при запуске именно этого и никакого другого исполняемого файла) и сделать что-то свое.
То есть, я кликаю по файлу "MyFuckingFile.exe", а служба в этот момент "Оп-пачки! Он это сделал! Поехали, ребята!"
Не подскажете, как это сделать?
заранее спасибо!

markyzz

ну или наоборот:
Как сделать так, чтобы программа сказала службе "Все! теперь можешь делать свои дела!"
Подскажите плз, как вообще наладить коммуникацию между приложением и службой?
:confused:

margadon

а нельзя открыть какой-нибудь файловый дескриптор и слушать его? как там под виндой такое делается?

markyzz

Файловый дескриптор, на сколько я понял децл погуглив, это что-то юниксовое?... или нет? у мну винда, но мне кажется, есть же у нее что-то чтоб отмечать все запущенные приложения....

markyzz

Ну, если совсем дословно, то вот так:
 
//тело службы
void __fastcall TUpdateService::ServiceExecute(TService *Sender)
{
while(!Terminated) // Цикл от запуска винды и до упора
{
if(программу MyFuckingProgram запустили)
{
Делаем то, что нужно сделать
}
ServiceThread->ProcessRequests(false);
}
}

Или, если со стороны приложения нажали на кнопочку, то:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
обратиться к службе и сказать, что она может делать все, чего так долго ожидала
}

как-то так....

markyzz

о! бегло просмотрел - вроде то, что нужно! спасибо!
буду разбираться :cool:

Serab

Если оба приложения пишешь ты, то проще воспользоваться обычными средствами межпроцессной синхронизации, например, http://msdn.microsoft.com/en-us/library/ms682396%28VS.85%29....

SPARTAK3959

В винде есть именованные event'ы. Если нужно передать только сам факт запуска программы - самое то.

markyzz

проще воспользоваться обычными средствами межпроцессной синхронизации
Э... туплю что-то совсем.... а можешь дать маленький пример кода со стороны программы и со стороны службы? Хотя бы примерно понять, как это выглядит изнутри... спасибо.

markyzz

В винде есть именованные event'ы. Если нужно передать только сам факт запуска программы - самое то.
Вроде, ссылка от и есть про именованные эвенты, только все равно нихрена не пойму и туплю страшно...

Serab

Создаешь в обеих прогах CreateEvent'ом объект ядра. Точнее в одном создаешь, в другом он просто получит его HANDLE, но не суть. Надо задать одинаковое имя. Тут что-то неясно? Спрашивай, может параметры какие-то непонятно, что значат.
Дальше там, где ждешь, вызываешь функцию WaitForSingleObject, справка тоже есть в MSDN. Она блокирует выполнение, пока не будет поднято событие.
Программа сигнализирует вызовом функции SetEvent, справку можно смотреть в MSDN. Там же должны быть примеры.

Serab

http://msdn.microsoft.com/en-us/library/ms686915%28v=VS.85%2...
Вот, есть такое. Но тут еще используются потоки. Но там немного лишнего.
Сначала полезно прочитать это: http://msdn.microsoft.com/en-us/library/ms682655%28v=VS.85%2...
Оставить комментарий
Имя или ник:
Комментарий: