使用记事本打开嵌入的Textfile

时间:2015-09-25 06:48:56

标签: c#

我有以下问题。我想使用“notepad.exe”打开嵌入式文本文件(agb.txt)。我有以下代码:

private void linkLabel4_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
   string editorPath = Environment.SystemDirectory + "\\notepad.exe";
   var startInfo = new ProcessStartInfo(editorPath)
   {
      //Start Maximized
      WindowStyle = ProcessWindowStyle.Maximized,
      Arguments = "agb.txt"
   };
   //Start notepad.exe (agb.txt)
   Process.Start(startInfo);
}

当我启动程序并单击Linklabel时,Notpad.exe打开但无法找到嵌入文件(显然)。那么有一种“解决方法”吗?

2 个答案:

答案 0 :(得分:2)

如何将文件保存到%TEMP%,然后只需调用

Process.Start(@"c:\temp\agb.txt");

(这实际上会在注册的任何应用程序中打开文件以加载它)

答案 1 :(得分:0)

您可以启动Nodepad.exe,然后发送"发送"从嵌入文件到它的文本。 您可以将文件内容读入字符串,然后调用DoSendMessage(stringWithYourFileContent);而不是我的硬编码字符串;

这个问题和答案是阅读嵌入文件内容的好资源:How to read embedded resource text file

class Program
{
    [DllImport("user32.dll", EntryPoint = "FindWindowEx")]
    public static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);

    [DllImport("User32.dll")]
    public static extern int SendMessage(IntPtr hWnd, int uMsg, int wParam, string lParam);



    static void Main(string[] args)
    {
        DoSendMessage("Sending a message, a message from me to you");
    }



    private static void DoSendMessage(string message)
    {
        Process notepad = Process.Start(new ProcessStartInfo("notepad.exe"));
        notepad.WaitForInputIdle();

        if (notepad != null)
        {
            IntPtr child = FindWindowEx(notepad.MainWindowHandle, new IntPtr(0), "Edit", null);
            SendMessage(child, 0x000C, 0, message);
        }
    }
}
  

此处记录了SendMessage的常量0x000c   http://msdn.microsoft.com/en-us/library/windows/desktop/ms632644(v=vs.85).aspx   。常量说SETTEXT,这真的意味着文本   如果您使用此消息发送多条消息,则会替换记事本   恒定。