我试图为" bukkit"制作GUI。
但我遇到了一些问题.. 但是很容易从控制台读取输出。但实际上是将字符串发回其中。有点困难。
以下是我如何读取输出并将其放入文本框中。
private void button1_Click(object sender, EventArgs e)
{
backgroundWorker1.RunWorkerAsync();
//ExecuteCommandSync("java -Xmx1024M -jar C:\\mc1\\craftbukkit.jar -o true");
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
server("java -Xmx1024M -jar F:\\Skrivebord\\MCTestServer\\craftbukkit.jar -o true");
}
public void server(string command)
{
try
{
var procStartInfo =
new System.Diagnostics.ProcessStartInfo("cmd", "/c " + command);
procStartInfo.RedirectStandardOutput = true;
procStartInfo.UseShellExecute = false;
procStartInfo.CreateNoWindow = true;
var proc = new System.Diagnostics.Process();
proc.OutputDataReceived += proc_OutputDataReceived;
//proc.StandardInput += proc_InputData;
proc.StartInfo = procStartInfo;
//processname = proc.ProcessName.ToString();
proc.Start();
proc.BeginOutputReadLine();
proc.WaitForExit();
}
catch (Exception objException)
{
Console.WriteLine("Error: " + objException.Message);
// Log the exception
}
}
void proc_OutputDataReceived(object sender, System.Diagnostics.DataReceivedEventArgs e)
{
this.Invoke((MethodInvoker)delegate
{
string textForConsole = "";
if (!(textBox1.Text == ""))
{
StringBuilder builder = new StringBuilder();
builder.Append(e.Data);
builder.AppendLine();
textForConsole = builder.ToString();
builder.Append(textBox1.Text).AppendLine();
textBox1.Text = builder.ToString();
}
else
{
textBox1.Text = e.Data;
}
});
}
这完美无缺。但我不知道如何从我的C#应用程序实际发送字符串或进入控制台..
我试过这个(用Google搜索我的方式。但是没有用。):
[DllImport("user32.dll", EntryPoint = "FindWindowEx")]
public static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);
[DllImport("user32.dll")]
static extern bool SetForegroundWindow(IntPtr hWnd);
[DllImport("User32.dll")]
public static extern int SendMessage(IntPtr hWnd, int uMsg, int wParam, string lParam);
private void button2_Click(object sender, EventArgs e)
{
Process p = Process.GetProcessesByName("java").FirstOrDefault();
if (p != null)
{
IntPtr h = p.MainWindowHandle;
SetForegroundWindow(h);
SendKeys.SendWait(textBox2.Text);
}
}
任何人都知道怎么做?
答案 0 :(得分:1)
您正在使用RedirectStandardOutput
来阅读输出。下一个逻辑步骤是使用RedirectStandardInput
将写入输入。如果您的应用程序是合适的pipe,那么它将起作用。
关于如何将密钥发送到程序,有一篇众所周知的文章:You can't simulate keyboard input with PostMessage这样也会给出正确答案:SendInput。谷歌的例子。
不,你不需要找到'这个过程。你刚开始吧,就在那里:' proc.Start()
!!