Mono C#gtk#GUI地精终端

德代图加

新成员
已加入
2019年6月11日
留言内容
4
编程经验
Beginner
我正在尝试使用Gtk项目和c#(csharp)在MonoDevelop上做一个Gui终端,但是我找不到适用于mono的示例,所以我开始构建自己的示例。这是我的实际代码:

my code:
using System;
using System.Diagnostics;

using Gtk;

public partial class MainWindow : Gtk.Window
{
    public MainWindow() : base(Gtk.WindowType.Toplevel)
    {
        Build();
    }

    protected void OnDeleteEvent(object sender, DeleteEventArgs a)
    {
        Application.Quit();
        a.RetVal = true;
    }

    protected void OnEntry3KeyReleaseEvent(object o, KeyReleaseEventArgs args)
    {
    }

    protected void OnButton1Clicked(object sender, EventArgs e)
    {
        //ExecuteCommand("gnome-terminal -x bash -ic 'cd $HOME; ls; bash'");

        ExecuteCommand(entry3.Text.ToString());
        //textview1.Buffer.Text = textview1.Buffer.Text + "\r\n" +     entry3.Text.ToString();
        entry3.Text = "";

    }

    protected void ExecuteCommand(string command)
    {
        Process proc = new System.Diagnostics.Process();
        proc.StartInfo.FileName = "gnome-terminal";
        //proc.StartInfo.Arguments = "-c \" " + command + " \"";
        proc.StartInfo.UseShellExecute = false;
        proc.StartInfo.RedirectStandardOutput = true;
        proc.Start();


        while (!proc.StandardOutput.EndOfStream)
        {
            textview1.Buffer.Text = proc.StandardOutput.ReadToEnd();
        }
    }
}

这个想法有一个带有文本输入和输出的gui终端。
你能帮我吗?
谢谢
 

德代图加

新成员
已加入
2019年6月11日
留言内容
4
编程经验
Beginner
您是否有要解决的特定问题?

嗨跳伞者,
谢谢您的回复。
是的,我有,我的代码无法正常工作,您可以在此视频中看到此处(我现在将其记录下来以发布)
有一个新的窗口闪烁,但我的textview上没有任何输出,录制此视频后,我尝试打开firefox并打开,但我的textview上没有输出。

















想法是将福彩12选5走势图写在底部单击发送的小文本框中,并在大textview框中获取输出。
我将需要控制linux终端的输入和处理输出,我将使用gui来管理一些福彩12选5走势图并根据输出进行操作。

像这样:
发送福彩12选5走势图并读取输出
过程输出
根据最后的输出发送回复福彩12选5走势图并读取新的输出
继续……

我不知道这是否重要,但是我在++ 1日前在monodevelop / downloads网站上使用Mono存储库安装了Mono。

有什么建议,教程,代码,想法吗?
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,497
地点
弗吉尼亚州切萨皮克
编程经验
10+
为什么要尝试将`ls`福彩12选5走势图作为参数传递给gnome-terminal?为什么不直接执行它呢?
 

德代图加

新成员
已加入
2019年6月11日
留言内容
4
编程经验
Beginner
为什么要尝试将`ls`福彩12选5走势图作为参数传递给gnome-terminal?为什么不直接执行它呢?

它运行得非常好,我认为我需要完善代码和/或寻找更好的示例...。

现在,当我尝试运行"cd ~/"或cd /窗口关闭而没有错误


















您知道我可以在此处使用的一些示例代码吗?
或一些在线项目,我可以在其中剥离代码?
还是您现在从顶部或脑袋为何关闭?
或者是其他东西?

谢谢
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,497
地点
弗吉尼亚州切萨皮克
编程经验
10+
For `cd` as well as various commands that actually change the state of the shell, you don't actually want to send those to OS to be executed. Instead those you want to translate yourself and call the the appropriate .NET Framework API. For example for `cd`, you'll want to set Environment.CurrentDirectory.

如果您在网上搜索,那么会有很多人要完成他们的操作系统分配,因此他们必须创建自己的shell。从本质上讲,这就是您需要执行的操作。他们的任务和您要做什么之间的唯一区别是:
  • 您正在使用C#,而他们正在使用C。
  • 您在使用.NET Framework的同时使用C库和OS API。
  • 您正在使用Gtk库与GUI元素进行交互,而GUI元素正在调用C库(和/或OS)与控制台API进行交互。
 
最佳 底部