如何通过C#控制台程序通过记事本打开和保存文件
我已经知道我可以用c语言的记事本打开和关闭现有的文本文件# 像这样:如何通过C#控制台程序通过记事本打开和保存文件,c#,save,notepad,C#,Save,Notepad,我已经知道我可以用c语言的记事本打开和关闭现有的文本文件# 像这样: using System.Diagnostics; class Program { static void Main(string[] args) { // open by notepad Process.Start("notepad.exe", @"myfile.txt"); // automatically save this file b
using System.Diagnostics;
class Program
{
static void Main(string[] args)
{
// open by notepad
Process.Start("notepad.exe", @"myfile.txt");
// automatically save this file by notepad
// kill notepad process
Process[] proc = Process.GetProcessesByName("notepad");
proc[0].Kill();
}
}
但是在我关闭这个文件之前,我需要用记事本自动保存这个文件。我试图按ctrl+s键发送击键,但没有成功。
有这个的.net代码吗?谢谢。如果您需要修改文件,更好的方法是使用类中当前存在的操作打开、修改和保存文本文件内容。当文件以代码打开时,您可以使用-namespace(System.Text.Encoding)中的类更改其编码
您可以启动
notepad.exe进程,但之后就没有太多事情要做了。我想您可以这样做
将给定的密钥发送到活动应用程序,然后等待
要处理的消息
备注
[DllImport("User32.dll")]
public static extern Int32 SetForegroundWindow(int hWnd);
使用SendWait将击键或击键组合发送到
激活应用程序并等待输入击键消息
处理。您可以使用此方法将击键发送到
应用程序并等待由启动的任何进程
要完成的击键。如果另一个
应用程序必须完成才能继续
导入
[DllImport("User32.dll")]
public static extern Int32 SetForegroundWindow(int hWnd);
代码
var process = Process.Start("notepad.exe", @"myfile.txt"));
process.WaitForInputIdle();
var handle = process.MainWindowHandle;
SetForegroundWindow(handle);
// if the window is still in the foreground
SendKeys.SendWait("^(s)"); // Ctrl+S
您希望在打开和保存之间发生什么?用户输入?据我所知,你不能Notepad.exe
需要为此公开一个API,据我所知,它没有。此外,您的代码不会终止它打开的记事本实例,而是终止它找到的第一个记事本实例。@RistoM实际上什么都没有,只需要记事本保存文本文件。保存之前,文件的编码为UCS-2 Little Endian。用记事本保存后,它转到UCS-2 LE BOM。我需要这个文件的编码变成UCS-2 LE BOM。@DavidStockinger我明白了。。。谢谢你提醒我杀戮的过程^^@KateChang好吧,我就是这么想的。我认为这种编码修复在C#中也是可行的,比如System.Text.encoding..OP没有征求其他人对他们可以做的事情的意见,所以这并不能真正回答问题。而且,你甚至没有解释如何实现你的建议,我认为这充其量只是一个评论,你是对的。因此,我在评论中向OP询问了一些额外的信息。在得到一些输入后,我将改进这个答案(或者删除,如果需要玩记事本的话)。