2015-04-01 61 views
1

我有一個處於運行狀態的Windows應用程序。我有另一個控制檯應用程序需要與我的winApp進行交互。我可以獲取正在運行的進程詳細信息,並將焦點從控制檯設置爲winApp,但我無法調用winApp的任何函數。如何從控制檯應用程序調用正在運行的winform應用程序的功能

有人可以幫我在這裏嗎?

如果我不清楚,請讓我知道。

+0

我不認爲你有什麼辦法可以直接做到這一點。我建議查看IPC(進程間通信),例如在兩個程序之間建立命名管道鏈接。 – RenniePet 2015-04-01 08:23:08

+0

你是否擁有這兩個應用程序的代碼? – 2015-04-01 08:35:26

+0

@Sam:是的,我的機器上只有代碼。 – 2015-04-01 08:39:07

回答

0

幾種可能性:

  1. 您可以發送鼠標事件和鍵盤事件到Windows應用程序(非常不可靠的,是正確的窗口中打開,並在上面?等等?)
  2. 你需要一些進程間通信(IPC)的形式。 (一些努力)

一些possibilites爲IPC:

  1. 共享內存
  2. 命名管道
  3. 插座
0

如果交互並不複雜,最簡單的方法是將自定義消息發佈到窗口。 Microsoft已經爲應用程序特定的信號保留了一系列可能的值。您可以使用RegisterMessage函數在運行時爲您的消息分配一個值,並讓其他應用程序確定當前值是什麼。

RegisterMessage功能:https://msdn.microsoft.com/en-us/library/windows/desktop/ms644947%28v=vs.85%29.aspx

你可以P /從每個應用程序調用RegisterMessage功能,因爲它開始。

PostMessage的功能:https://msdn.microsoft.com/en-us/library/windows/desktop/ms644944%28v=vs.85%29.aspx

您可以P/Invoke的PostMessage的功能,在您的控制檯應用程序。

然後,您的winforms應用程序將需要偵聽該消息,我認爲一個地方要做到這一點是通過重寫PreFilterMessage方法。

不可否認,您不會獲得大量可隨事件一起推送的數據。我曾用這一次在兩個進程之間傳遞驅動器號。

0

您正在研究某種進程間通信,並且有許多方法可以根據您嘗試實現的範圍來實現此目的。

例如,如果您需要應用程序之間豐富的接口,您可以在Windows應用程序中託管WCF服務器,並通過控制檯應用程序將其作爲WCF客戶端連接到此應用程序。這將允許您在應用程序中公開調用方法。

e。G: https://msdn.microsoft.com/en-us/library/ee939340.aspx

您還可以使用命名管道,這給你一個簡單的讀/寫API進出特定過程,以獲取信息,那麼你只需要處理在應用程序中接收到的信息,並執行功能

例如:https://msdn.microsoft.com/en-us/library/bb546102(v=vs.110).aspx

希望這會有所幫助。

相關問題