2010-03-03 17 views
2

我正在使用C#和進程newProcess = Process.Start(「someProgram.exe」);如何訪問進程上的公共字段? C#

這個someProgram.exe有一個公共文本框的窗體。

有無論如何,我可以使用newProcess來設置文本框? 我希望會有像newProcess.GetField(textField1).Text =「Awesome」;

我在調試過程中查看了Process API和屬性,沒有任何內容跳出。

編輯: 我確實有someProgram.exe的源代碼,所以我知道文本框字段是公開的。我無法編輯某些程序的源代碼。 使用Process.Start的代碼已經傳出,我不想花時間改變它的工作方式,如果我可以將一些參數傳遞給新的進程。

我真正的目標是當的Process.Start(「someProgram.exe」)上運行我可以將文字文本字段,以便我可以偷懶,而不是輸入一個用戶名和PW每次。 :)

謝謝

+0

你無法進入其他過程,並玩弄它裏面的東西!你想達到什麼目的? – 2010-03-03 18:35:40

+2

他可能正在嘗試使用他沒有源代碼的GUI應用程序。這實際上是一個很好的問題,即使通常你不應該這樣做。 – 2010-03-03 18:41:19

回答

0

您不能直接訪問它。

成員只在其運行的應用程序中公開。以這種方式,您無法直接訪問其他應用程序中的類型。

順便說一句,這是一件非常好的事情。如果允許您混淆其他應用程序的內部操作,那麼您可以完全違反任何應用程序中存在的任何安全模型。系統安全性和穩定性會受到很大影響

有此情況下兩種選擇:

  1. 如果其他應用程序是你的,把它做成一個庫,而不是一個單獨的應用程序。只需直接從應用程序中顯示錶單。您將可以訪問這些類型。
  2. 使用某種形式的Interprocess Communication來允許兩個進程相互「交談」,並根據請求傳遞值。 Windows Communication Foundation對此非常有效。
+0

這兩個應用程序都是我的。 我想到了這一點,但我所擁有的代碼是流傳下來的,它是我所看到的一個側面/個人項目。我想用最少的工作做到這一點。 我會看看#2謝謝 – Brad8118 2010-03-03 21:11:28

0

簡短的答案可能不是。也許很長的答案。如果你打開一些Program程序並使用Spy ++,你可能能夠蒐集關於窗口信息的信息,然後發送一個WM_ *消息到右窗口句柄,這將模仿文本框的文本輸入。

我只會走這條路線,如果你沒有someProgram.exe的來源,這將允許你使用更傳統的手段。