我有以下代碼:使用C#應用程序可以在另一個進程中保存數據嗎?
p.StartInfo.FileName = "notepad.exe";
p.StartInfo.Arguments = "somefile.txt";
p.Start();
當「somefile.txt」在記事本中打開,其文本將被修改。我想用C#應用程序自動將新文本保存在臨時文件中。 是否可以訪問此文本並使用C#保存?
我有以下代碼:使用C#應用程序可以在另一個進程中保存數據嗎?
p.StartInfo.FileName = "notepad.exe";
p.StartInfo.Arguments = "somefile.txt";
p.Start();
當「somefile.txt」在記事本中打開,其文本將被修改。我想用C#應用程序自動將新文本保存在臨時文件中。 是否可以訪問此文本並使用C#保存?
這是可能的,你可以使用P/Invoke來調用SendMessage()方法併爲Edit + Select-All和Edit + Copy菜單命令生成WM_COMMAND消息。這將所有文本放在剪貼板上,隨時可供您的程序訪問。您需要使用Spy ++實用程序來查明命令標識符是什麼。當我在Win7上看它時,看起來像25和769。
有更直接的方法來發現命令。在Visual Studio中選擇File + Open + File並選擇c:\ windows \ notepad.exe。打開菜單節點並雙擊「1」資源。這將打開菜單編輯器,選擇Edit + Select-All並查看ID的Properties窗口。
當然,這種技術特定於記事本。另一個程序的命令ID將會不同。這將是你需要找到合適的窗口句柄的代碼。使用Process.MainWindowHandle最好是詭計多端,你不知道你需要選擇哪個特定的進程實例。
在記事本過程中查看內存中的文本將非常困難。它可以完成,但它取決於記事本的內部內存佈局,並且您的進程可能需要管理權限,具體取決於內存頁面的保護方式。
爲什麼不使用FileSystemWatcher來檢測文件何時被修改,然後直接使用c#讀取文件?
http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.aspx
複製somefile.txt您啓動記事本之前到一個臨時文件/文件夾。使用這個臨時文件啓動記事本。並等待記事本退出。
然後你可以檢查文件是否被改變(校驗和?)。
處理完後可能會刪除文件,或者您的系統將被臨時文件填滿。
您可以將記事本窗口放在前面併發送CTRL + S。你將需要使用pinvoke。
我真的不明白你爲什麼要使用記事本?
如果您需要用戶編輯文本文件,然後您的應用程序對文本本身採取一些操作,爲什麼不讓用戶能夠在應用程序中正確編輯文本?
什麼記事本給你,TextBox控件沒有?
嘗試這樣的事情
using System.Windows.Forms;
using System.IO;
TextBox myEditor = new TextBox();
myEditor.Multiline = true;
myEditor.ScrollBars = ScrollBars.Vertical;
myEditor.AcceptsReturn = true;
myEditor.AcceptsTab = true;
myEditor.WordWrap = true;
// Get the text from the file.
StreamReader sr = new StreamReader("SomeFile.txt"))
myEditor.Text = sr.ReadToEnd();
這是因爲我有一個USB設備,可以在任何打開的記事本窗口中自動寫入數據。 PC保存這些數據。 – 2009-12-28 15:52:46
你想的過程中被關閉後訪問保存的文件? – Diadistis 2009-12-28 14:26:40
不,我想在記事本打開時訪問文本。 – 2009-12-28 14:36:25