Запустить функцию при запуске приложения при выполнении - PullRequest
0 голосов
/ 11 апреля 2010

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

Есть идеи?

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

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

Ответы [ 3 ]

4 голосов
/ 11 апреля 2010

1: Типичное решение - использовать для этого именованный мьютекс. См. Этот вопрос, заданный на MSDN для получения более подробной информации.

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

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

1 голос
/ 11 апреля 2010

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

Таблица запущенных объектов: поставщик в .NET, потребитель в MFC

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

0 голосов
/ 11 апреля 2010

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

Я использую программу Win32 API, а не MFC / .net

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

По сути, ищите межпроцессное взаимодействие в Win32 API.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...