2010-07-13 55 views
0

我試圖在這裏完成客戶端請求,但我並不完全確定我可以實際執行此操作。我有一個MFC應用程序依賴於ShellExecute在適當的查看器中打開文件,如果您嘗試依次打開多個文件,則會生成多個查看器。如果您打開一個.txt文檔,然後打開另一個,則會按預期顯示兩個記事本副本。使用Win32/MFC將文件位置傳遞到外部進程

客戶希望我們更改此功能 - Windows的功能 - 僅將文件位置傳遞給任何可能已經打開的查看器。點擊的第一個圖像應打開圖像查看器,但其他任何應該只在該現有的過程中打開。

這種應用程序間的控制/通信是否可能?我能否將文件一般地「傳遞」到現有流程?我不認爲我可以。以文件作爲參數執行程序是一回事,但將文件傳遞到正在運行的進程是完全不同的。我不確定你可以做到這一點,我不認爲這種功能是Windows API中的任何地方。

雖然我可能是錯的。

回答

0

如果查看器不支持同一實例中的多個打開的文件,則這是不可能的。

在您的示例中:記事本將爲每個文件啓動一個新版本,而Notepad ++(免費編輯器)將在同一個實例中的新選項卡中打開。

+0

那麼,他們沒有在同一個實例中打開多個文件。如果打開FileB.txt導致記事本關閉FileA.txt,那是可以接受的。我只是不認爲這是可能的。 – 2010-07-13 15:52:07

0

您應該嘗試的第一件事是用新參數再次調用程序。如果程序以這種方式編寫,它會將新參數委託給現有實例。記事本不會這樣做,但圖像查看器可能會。

您可以嘗試的下一件事是通過自己跟蹤手柄來管理應用程序的生命週期。您可以調用CreateProcess,以便創建並擁有此進程的句柄。在下一次調用CreateProcess時,枚舉打開的窗口並嘗試查找最後一個句柄。如果找到手柄,關閉它並繼續打開過程。你只能得到一個開放的應用程序。爲了獲得最可靠的解決方案,請將其放在單獨的線程中並等待句柄(以及新的請求事件)以避免任何競爭條件。