2010-04-11 45 views
0

好的應用程序運行功能,所以我試圖做的是本質上創建一個,在已經執行的時候,可以「執行」程序再次,檢測和而不是創建另一個進程已經存在的過程中,在現有流程中執行一個功能。上運行的執行

任何想法?

這是可能的,我要在這個完全錯誤的。我正嘗試將此開源虛擬打印機(http://sourceforge.net/projects/imageprinter/)改編爲我的應用程序。打印機將例如PDF文件打印到文件中,並且它似乎也具有啓動應用程序的功能。我需要將PDF抓到我自己的應用程序中進行處理,用戶需要能夠通過將其打印到本打印機來附加更多的pdf。

我正打算處理它的方式是讓應用程序檢查新文件的文件夾,每次打開和打印一個新的文件,當命令被調用。還有另一種更直接將pdf數據導入正在運行的進程的方法嗎?

回答

4

1:典型的解決方案是使用一個名爲互斥此。 See this question asked on MSDN瞭解更多詳情。

2:使用one of these functions(可能是FindWindowEx?)和(如果需要)以某種方式獲取用於在兩個進程之間查找HWND的信息。對不起,我不能更清楚,有方式太多的方式來做到這一點,它因應用程序而異。

3:在知道其他應用程序正在運行後,您可以使用SendMessage和您自己的UINT message(確保它不與現有消息衝突),並確保在消息循環中處理特殊消息。

+0

答案阻止另一個進程,但是有可能然後發送命令到已經運行的進程? – hmind 2010-04-11 19:09:26

+0

@hmind:這是第二階段,您需要使用進程間通信機制讓第一個進程知道應該做什麼。如果你有一個窗口句柄,使用SendMessage,WM_COPYDATA,如果你沒有,則使用命名管道。這些是明顯的選擇,還有其他的。 – 2010-04-11 21:17:03

+0

對不起:我已經修改了我的答案,以澄清和whatnot。 – 2010-04-11 23:39:30

1

聽起來像是你可能要開始圍繞谷歌搜索有關運行對象表信息......這是樣品與和MFC客戶端調用與運行對象表本身註冊一個.NET應用程序,使他們能夠進行進程間通信。

Running Object Table: Provider in .NET, consumer in MFC

究竟是什麼你想在這裏做的,我相信你有一個很好的理由讓你在做什麼,但有可能是得到一個更簡單的方法相同結果的其他方法。

0

有兩個階段答案:

我asumming一個Win32 API的程序,而不是MFC/.NET

  1. 命名mutexs,如指出。
  2. WM_USER消息。在你的消息循環中,設置一個case來處理你定義的消息。該消息將導致目標函數的執行。

基本上,在win32 api中查找進程間通信。