Передача местоположения файла внешнему процессу с использованием Win32 / MFC - PullRequest
0 голосов
/ 13 июля 2010

Я пытаюсь выполнить запрос клиента здесь, и я не совсем уверен, что смогу это сделать. У меня есть приложение MFC, которое использует ShellExecute для открытия файлов в соответствующем средстве просмотра, которое порождает несколько средств просмотра, если вы пытаетесь открыть несколько файлов один за другим. Если вы откроете один текстовый документ, а затем откроете другой, две копии блокнота появятся, как и ожидалось.

Клиент хочет, чтобы мы изменили эту функциональность - функциональность Windows - чтобы просто передавать местоположения файлов любым зрителям, которые могут уже открываться. Первое нажатие на изображение должно открыть Image Viewer, но любое другое должно быть просто открыто в этом существующем процессе.

Возможен ли такой вид управления / связи между приложениями? Могу ли я в общем "передать" файлы существующим процессам? Я не думаю, что могу. Выполнение программы с файлом в качестве параметра - это одно, а передача файла запущенному процессу - это совсем другое. Я не уверен, что вы можете сделать это в общем, я не думаю, что такая функциональность есть где-нибудь в Windows API.

Хотя я могу ошибаться.

Ответы [ 2 ]

0 голосов
/ 14 июля 2010

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

Следующее, что вы можете попробовать, - это управлять жизненным циклом приложения, следя за ручкой самостоятельно.Вы вызываете CreateProcess, поэтому вы создаете и владеете дескриптором этого процесса.При следующем вызове CreateProcess перечислите открытые окна и попытайтесь найти свой последний дескриптор.Если ручка найдена, закройте ее и продолжите процесс открытия.Вы должны получить только одно открытое приложение.Для наиболее надежного решения поместите это в отдельный поток и дождитесь, пока дескриптор (а также событие нового запроса) не будут допущены какие-либо условия гонки.

0 голосов
/ 13 июля 2010

Это невозможно, если программа просмотра не поддерживает несколько открытых файлов в одном экземпляре.

в вашем примере: блокнот будет запускать новую версию с каждым файлом, в то время как Notepad ++ (бесплатный редактор) будет открываться в том же экземпляре в новой вкладке.

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