繁体   English   中英

使用Win32 / MFC将文件位置传递到外部进程

[英]Passing a file location to an external process using Win32/MFC

我正在尝试满足客户的要求,但我不确定我是否真的可以做到。 我有一个MFC应用程序,它依赖ShellExecute在相应的查看器中打开文件,如果您尝试一个接一个地打开多个文件,则会生成多个查看器。 如果您打开一个.txt文档,然后再打开另一个文档,则记事本将出现两个副本。

客户希望我们更改此功能-Windows的功能-只是将文件位置传递给可能已经打开的任何查看器。 单击的第一个图像应打开“图像查看器”,而其他任何图像都应在该现有过程中打开。

这样的应用程序间控制/通讯是否可能? 我可以一般地将文件“传递”到现有进程吗? 我认为我做不到。 以文件为参数执行程序是一回事,而将文件传递给正在运行的进程则完全是另一回事。 我不确定您是否可以照常进行,我认为Windows API中没有任何功能。

我可能是错的。

如果查看器在同一实例中不支持多个打开的文件,则这是不可能的。

在您的示例中:notepad将为每个文件启动一个新版本,而Notepad ++(免费编辑器)将在同一实例中的新选项卡中打开。

您应该尝试的第一件事是使用新参数再次调用该程序。 如果以这种方式编写程序,它将把新参数委托给现有实例。 记事本不会执行此操作,但是图像查看器可能会执行此操作。

您可以尝试的下一件事是通过自己跟踪句柄来管理应用程序的寿命。 您调用CreateProcess,因此您创建并拥有此过程的句柄。 在下一次调用CreateProcess时,枚举打开的窗口并尝试找到您的最后一个句柄。 如果找到了手柄,则将其关闭并继续打开过程。 您应该只获得一个打开的应用程序。 对于最可靠的解决方案,请将其放在单独的线程中,并等待该句柄(以及新的请求事件)以避免任何竞争情况。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM