Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用Win32/MFC将文件位置传递给外部进程_C++_C_Windows - Fatal编程技术网

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

C++ 使用Win32/MFC将文件位置传递给外部进程,c++,c,windows,C++,C,Windows,我试图满足一个客户的要求,但我不完全确定我能做到。我有一个MFC应用程序,它依赖ShellExecute在相应的查看器中打开文件,如果您尝试一个接一个地打开多个文件,就会生成多个查看器。如果打开一个.txt文档,然后再打开另一个,则会按预期显示两份记事本 客户端希望我们更改此功能(Windows的功能),只将文件位置传递给任何可能已经打开的查看器。单击的第一个图像应打开图像查看器,但任何其他图像应仅在现有进程中打开 这种应用程序间控制/通信是否可行?我是否可以将文件传递给现有进程?我想我做不到。

我试图满足一个客户的要求,但我不完全确定我能做到。我有一个MFC应用程序,它依赖ShellExecute在相应的查看器中打开文件,如果您尝试一个接一个地打开多个文件,就会生成多个查看器。如果打开一个.txt文档,然后再打开另一个,则会按预期显示两份记事本

客户端希望我们更改此功能(Windows的功能),只将文件位置传递给任何可能已经打开的查看器。单击的第一个图像应打开图像查看器,但任何其他图像应仅在现有进程中打开

这种应用程序间控制/通信是否可行?我是否可以将文件传递给现有进程?我想我做不到。以文件作为参数执行程序是一回事,但将文件传递给正在运行的进程则完全是另一回事。我不确定您是否可以一般地做到这一点,我认为Windows API中没有这种功能


但是,我可能错了。

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


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

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


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

好吧,不在同一实例中打开多个文件也可以。如果打开FileB.txt导致记事本关闭FileA.txt,这是可以接受的。我只是觉得不可能。