2011-04-02 28 views
0

是否有可能從另一個c#項目(Windows窗體)打開c#exe文件(控制檯應用程序),並從exe文件寫入或讀取不同的文本值?我使用user32dll來處理exe文件。c#從c#exe文件中添加或讀取

THX 我沒有用這種方法在一個exe文件添加文本:

 Clipboard.SetText("Message!"); 
     foreach (IntPtr pPost in pControls) 
     { 
      PostMessage(pPost, (uint)WindowMessage.WM_PASTE, 0, 0); 
     } 

,但不工作。我沒有看到在C#EXE(這是一個控制檯應用程序)中添加「消息」職位。你使用notepad.exe everyting工作正常。

+0

你能詳細說明這些日期嗎?他們什麼日期?他們是變數嗎?另外,我真的不認爲你需要'user32.ddl'來寫入exe文件? – gideon 2011-04-02 12:42:59

+0

字符串值。我想讀取和寫入exe文件中的文本值 – dina 2011-04-02 12:44:34

+0

,所以你想只讀/寫日期到exe文件?你想將這些附加到exe? – gideon 2011-04-02 12:45:25

回答

5

可以使用Process類執行命令行應用程序,並使用StandardInputStandardOutput屬性重定向輸入/輸出。

從MSDN:

Process p = new Process(); 
p.StartInfo.UseShellExecute = false; 
p.StartInfo.RedirectStandardOutput = true; 
p.StartInfo.FileName = "Write500Lines.exe"; 
p.Start(); 
string output = p.StandardOutput.ReadToEnd(); 
p.WaitForExit(); 

有在StandardOutput頁上面鏈接上更多的例子。

+0

+1不知道你能做到這一點! =)但是,這將包括髮送輸入到執行的exe文件的調用exe文件?對? – gideon 2011-04-02 12:50:43

+1

@giddy - 你也可以重定向'StandardInput'和'StandardError'。 – Oded 2011-04-02 12:51:26

+0

OK查詢MSDN,似乎你可以只做標準輸入的_opposite_!很好,今天學點新東西! – gideon 2011-04-02 12:51:42

2

這裏有很多可能的故障模式。

  • 首先,WM_PASTE被髮送,沒有發佈,你應該使用SendMessage()。
  • 只有有限數量的Windows控件實際上實現了此消息的行爲,它必須是編輯控件,豐富的編輯控件或組合框。
  • UIPI是UAC的用戶界面部分,它可以阻止未劫持的進程劫​​持高級用戶的權限。
  • 有這樣做的用處,粘貼文本子窗口沒有多大意義。
  • 您用於PostMessage()的pinvoke聲明不正確,wparam和lparam參數是IntPtr,而不是int。

請訪問pinvoke.net(通常)正確的pinvoke聲明。