2009-12-28 29 views
0

我有以下代碼:使用C#應用程序可以在另一個進程中保存數據嗎?

p.StartInfo.FileName = "notepad.exe"; 
p.StartInfo.Arguments = "somefile.txt"; 
p.Start(); 

當「somefile.txt」在記事本中打開,其文本將被修改。我想用C#應用程序自動將新文本保存在臨時文件中。 是否可以訪問此文本並使用C#保存?

+0

你想的過程中被關閉後訪問保存的文件? – Diadistis 2009-12-28 14:26:40

+1

不,我想在記事本打開時訪問文本。 – 2009-12-28 14:36:25

回答

3

這是可能的,你可以使用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最好是詭計多端,你不知道你需要選擇哪個特定的進程實例。

3

在記事本過程中查看內存中的文本將非常困難。它可以完成,但它取決於記事本的內部內存佈局,並且您的進程可能需要管理權限,具體取決於內存頁面的保護方式。

爲什麼不使用FileSystemWatcher來檢測文件何時被修改,然後直接使用c#讀取文件?

http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.aspx

2

複製somefile.txt您啓動記事本之前到一個臨時文件/文件夾。使用這個臨時文件啓動記事本。並等待記事本退出。

然後你可以檢查文件是否被改變(校驗和?)。

處理完後可能會刪除文件,或者您的系統將被臨時文件填滿。

0

您可以將記事本窗口放在前面併發送CTRL + S。你將需要使用pinvoke。

0

我真的不明白你爲什麼要使用記事本?

如果您需要用戶編輯文本文件,然後您的應用程序對文本本身採取一些操作,爲什麼不讓用戶能夠在應用程序中正確編輯文本?

什麼記事本給你,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(); 
+0

這是因爲我有一個USB設備,可以在任何打開的記事本窗口中自動寫入數據。 PC保存這些數據。 – 2009-12-28 15:52:46

相關問題