如何使用GTK,XLib或类似程序将程序嵌入到另一个程序中?

时间:2011-07-21 05:41:11

标签: linux gtk embed xlib

我正在尝试创建一个“简单”的程序,它所做的就是列出所有打开的程序,一旦你选择了一个,它就会在你的窗口中打开它(就像你可能会说的缩略图,但你也可以互动)。

有一件事,它必须是单向的(我不能改变嵌入式程序并添加“套接字”或“插件”)。我希望能够嵌入任何程序(例如Opera,evince,JDownloader等)。

有没有人知道我该怎么做?

如果使用GTK无法完成,可以使用X或类似方法完成吗?怎么样?

3 个答案:

答案 0 :(得分:1)

看来你正在寻找像XEmbed这样的东西。 python和gtk的一个很好的教程是http://www.moeraki.com/pygtktutorial/pygtk2tutorial/sec-PlugsAndSockets.html

答案 1 :(得分:1)

您可以使用GtkPlugGtkSocket

答案 2 :(得分:0)

using System;using Gtk;using System.Runtime.InteropServices;       public partial class MainWindow : Gtk.Window{



public MainWindow () : base(Gtk.WindowType.Toplevel)
{
    Gtk.Socket socket;
    int xid;
    Fixed fixed2=new Fixed();
    this.socket = new Socket();
    this.socket.WidthRequest = 500;
    this.socket.HeightRequest = 500;
    this.socket.Visible = true;
    this.socket.Realized += new EventHandler(OnVideoWidgetRealized);

    fixed2.Put(socket, 0, 0);
    fixed2.SetSizeRequest(500,500);
    this.Add(fixed2);
    this.ShowAll();

    OnButton17Clicked();

}

protected virtual void OnVideoWidgetRealized (object sender, EventArgs
                                              args)
{
    this.xid = (int)socket.Id;
    Console.WriteLine("this.xid:"+this.xid);
}

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

protected  void OnButton17Clicked ()
{
    var paramString = string.Format("-wid {0} 1.avi", xid);
    System.Diagnostics.Process proc = new System.Diagnostics.Process();
    proc.StartInfo.FileName = "mplayer.exe";
    proc.StartInfo.Arguments = paramString;
    proc.Start();
    proc.WaitForExit();

}
public static void Main()
{
    Application.Init();
    new MainWindow();
    Application.Run();
}}