2010-02-08 37 views
1

我必須在我的MFC應用程序中打開一個外部程序,該程序可以正常工作,但如果我已經點擊了按鈕,我不希望它打開另一個實例,只是將它放在前面。該文檔說SW_SHOWNORMAL參數可以做到這一點,但它不適合我。被調用的程序是否也必須爲此設置?在MFC中啓動外部exe文件,如果已打開,如何將exe文件帶到前面?

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

感謝, CP

回答

4

該文檔是有點不清楚,這可能是什麼讓你感到困惑。在定位可執行程序時,ShellExecute()將始終啓動一個新進程。當它提到恢復最小化窗口時,文檔所指的是如果您要定位文檔(如Word文檔),並且註冊以顯示文檔的應用程序已在運行。

您最好的選擇是要麼:

  • 修改外部程序來支持辛格爾頓模式,並把自己的前沿和中心,如果你試圖啓動第二個副本,或
  • 使用FindWindow()在您的MFC應用程序中試圖找到外部應用程序,然後只運行ShellExecute()(如果它不存在),否則激活現有窗口。