c#从c#exe文件中添加或读取

时间:2011-04-02 12:40:54

标签: c#

是否可以从另一个c#项目(windows窗体)打开c#exe文件(控制台应用程序)并从exe文件中写入或读取不同的文本值?我正在使用user32dll来处理exe文件。

THX 我确实使用此方法在exe文件中添加文本:

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

但不起作用。我没有在c#exe中添加“消息”帖子(这是一个控制台应用程序)。你使用notepad.exe,你的工作正常。

2 个答案:

答案 0 :(得分: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页面上有更多示例。

答案 1 :(得分:2)

这里有大量可能的故障模式。

  • 首先,发送WM_PASTE,而不是发布,你应该使用SendMessage()。
  • 只有有限数量的Windows控件实际上实现了此消息的行为,它必须是编辑控件,丰富的编辑控件或组合框。
  • UIPI是UAC的用户界面部分,它阻止了一个未经高速进程的劫持高架特权。
  • 做这样的事情是有用的,在每个子窗口中粘贴文字都没有多大意义。
  • 您用于PostMessage()的pinvoke声明不正确,wparam和lparam参数是IntPtr,而不是int。

访问pinvoke.net以获取(通常)正确的pinvoke声明。