我有一個處於運行狀態的Windows應用程序。我有另一個控制檯應用程序需要與我的winApp進行交互。我可以獲取正在運行的進程詳細信息,並將焦點從控制檯設置爲winApp,但我無法調用winApp的任何函數。如何從控制檯應用程序調用正在運行的winform應用程序的功能
有人可以幫我在這裏嗎?
如果我不清楚,請讓我知道。
我有一個處於運行狀態的Windows應用程序。我有另一個控制檯應用程序需要與我的winApp進行交互。我可以獲取正在運行的進程詳細信息,並將焦點從控制檯設置爲winApp,但我無法調用winApp的任何函數。如何從控制檯應用程序調用正在運行的winform應用程序的功能
有人可以幫我在這裏嗎?
如果我不清楚,請讓我知道。
幾種可能性:
一些possibilites爲IPC:
如果交互並不複雜,最簡單的方法是將自定義消息發佈到窗口。 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方法。
不可否認,您不會獲得大量可隨事件一起推送的數據。我曾用這一次在兩個進程之間傳遞驅動器號。
您正在研究某種進程間通信,並且有許多方法可以根據您嘗試實現的範圍來實現此目的。
例如,如果您需要應用程序之間豐富的接口,您可以在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
希望這會有所幫助。
我不認爲你有什麼辦法可以直接做到這一點。我建議查看IPC(進程間通信),例如在兩個程序之間建立命名管道鏈接。 – RenniePet 2015-04-01 08:23:08
你是否擁有這兩個應用程序的代碼? – 2015-04-01 08:35:26
@Sam:是的,我的機器上只有代碼。 – 2015-04-01 08:39:07