2010-04-11 4 views
0

Хорошо, что я пытаюсь создать, по существу, создать программу, которая, когда она уже выполнена, может быть «выполнена» снова, обнаружить уже существующий процесс и вместо создания другого процесса, выполнить функцию в существующем процессе.Функция запуска при запуске приложения при выполнении

Любые идеи?

Возможно, я нахожусь на этом все неправильно. Я пытаюсь адаптировать этот виртуальный принтер с открытым исходным кодом (http://sourceforge.net/projects/imageprinter/) к моему приложению. Принтер печатает, например, PDF в файл, и, похоже, также имеет функцию запуска приложения. Мне нужно взять PDF в мое приложение для обработки на этом этапе, и пользователь должен иметь возможность добавлять больше PDF-файлов, печатая их на этом принтере.

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

ответ

4

1: Типичным решением является использование названного мьютекса для этого. See this question asked on MSDN для более подробной информации.

2: Используйте one of these functions (возможно, FindWindowEx?) И (при необходимости), чтобы получить информацию о поиске HWND между двумя процессами. Извините, я не могу быть более ясным, есть путь слишком много способов сделать это, и оно варьируется от приложения к приложению.

3: После того, как вы знаете, что запущено другое приложение, вы можете использовать SendMessage со своим собственным UINT message (убедитесь, что он не столкнулся с существующим сообщением) и не забудьте обработать специальное сообщение в вашем контуре сообщения.

+0

, который отвечает на предотвращение другого процесса, но можно ли затем отправить команду на уже запущенный процесс? – hmind

+0

@hmind: это второй этап, вам нужно использовать механизм межпроцессного взаимодействия, чтобы 1-й процесс знал, что делать. Используйте SendMessage, WM_COPYDATA, если у вас есть дескриптор окна, именованный канал, если вы этого не сделаете. Это очевидный выбор, есть и другие. –

+0

Извините: я пересмотрел свой ответ для ясности и еще чего-то. –

1

Похоже, что вы можете начать поиск в Google для получения информации о таблице рабочих столов ... Вот пример с клиентом MFC и вызовом приложения .net, которое регистрируется в таблице «Запуск объекта», чтобы они могли выполнять взаимодействие между процессами ,

Running Object Table: Provider in .NET, consumer in MFC

Что именно вы пытаетесь сделать здесь, я уверен, что у вас есть веские основания для того, что вы делаете, но могут быть и другие подходы, которые получают тот же результат, более простым способом.

0

Есть два этапа ответа:

Я asumming программу API Win32, а не MFC/.net

  1. Названы mutexs, как было указано.
  2. WM_USER сообщения. В вашем цикле сообщений настройте регистр для обработки сообщений, которые вы определили. Это сообщение вызовет выполнение вашей целевой функции.

В принципе, найдите связь между процессами в win32 api.

Смежные вопросы