1

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

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

谢谢,CP

4

1 回答 1

4

文档有点不清楚,这可能会让您感到困惑。以可执行程序为目标时,ShellExecute()总是会启动一个新进程。当文档提到恢复最小化窗口时,该文档所指的是如果您以文档为目标(如 Word 文档),并且注册以显示该文档的应用程序已经在运行。

您最好的选择是:

  • 修改外部程序以支持单例模式,并在您尝试启动第二个副本时将其置于首位和中心,或者
  • 在您的 MFC 应用程序中使用FindWindow()以尝试定位外部应用程序,然后仅ShellExecute()在它不存在时运行,否则激活现有窗口。
于 2010-02-08T16:48:57.170 回答