在MFC中启动外部exe,如果已经打开,如何将exe带到前面?

时间:2010-02-08 13:48:23

标签: mfc shellexecute

我必须在我的MFC应用程序中打开一个外部程序,但是如果我已经单击了按钮,我不希望它打开另一个实例,而只是将它带到前面。文档说SW_SHOWNORMAL参数执行此操作,但它不适用于我。被调用程序是否也必须为此设置?

ShellExecute(NULL, "open", "C:\Test\blahblah.exe", NULL, NULL, SW_SHOWNORMAL);

谢谢, CP

1 个答案:

答案 0 :(得分:4)

文档有点不清楚,这可能让你感到困惑。在定位可执行程序时,ShellExecute()将始终启动新进程。文档在提及恢复最小化窗口时所指的是,如果您要定位文档(如Word文档),则注册以显示文档的应用程序已在运行。

你最好的选择是:

  • 修改外部程序以支持 Singleton 模式,如果您尝试启动第二个副本,则将自身置于前端和中心,或
  • 在MFC应用程序中使用FindWindow()尝试找到外部应用程序,然后仅运行ShellExecute()(如果它尚不存在),否则激活现有窗口。