Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何使用GTK、XLib或任何类似工具将一个程序嵌入到另一个程序中?_Linux_Gtk_Embed_Xlib - Fatal编程技术网

Linux 如何使用GTK、XLib或任何类似工具将一个程序嵌入到另一个程序中?

Linux 如何使用GTK、XLib或任何类似工具将一个程序嵌入到另一个程序中?,linux,gtk,embed,xlib,Linux,Gtk,Embed,Xlib,我试图制作一个“简单”的程序,它所做的只是列出所有打开的程序,一旦你选择了一个,它就会在你的窗口中打开它(就像你可能说的缩略图,但你也可以进行交互) 有一件事,它必须是单向的(例如,我不能改变经过修饰的程序并添加“socket”或“plug”)。我想能够演示任何程序(例如Opera、evince、JDownloader等) 有人知道我该怎么做吗 如果不能使用GTK完成,可以使用X或任何类似工具完成吗?怎么做?看来您正在寻找类似XEmbed的产品。python和gtk的一个很好的教程是在上,你可以

我试图制作一个“简单”的程序,它所做的只是列出所有打开的程序,一旦你选择了一个,它就会在你的窗口中打开它(就像你可能说的缩略图,但你也可以进行交互)

有一件事,它必须是单向的(例如,我不能改变经过修饰的程序并添加“socket”或“plug”)。我想能够演示任何程序(例如Opera、evince、JDownloader等)

有人知道我该怎么做吗


如果不能使用GTK完成,可以使用X或任何类似工具完成吗?怎么做?

看来您正在寻找类似XEmbed的产品。python和gtk的一个很好的教程是在

上,你可以使用它。

谢谢,我稍后会看一看,然后再给你回复。我认为这对我没有帮助,我想在任何程序中都这样做,我不能在其中放套接字。我明白了,你想要一个类似迷你窗口管理器的程序。您可能需要与正在运行的窗口管理器进行通信。根据WM的运行情况,这可能需要以不同的方式完成。实际上,给定windows的缩略图,您可以使用XSendEvent()来模拟用户交互。不过,如果程序使用指针抓取,就会出现问题,因为它会突然得到屏幕坐标,而不是你翻译的坐标。为了让问题更清楚,我改变了我的问题。我不能修改embbed程序,我想制作一个嵌入任何其他程序(Opera、evince等)的程序。
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();
}}