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

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

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

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

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

您可以使用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页面上有更多示例。

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

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

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