Как встроить программу в другую, используя GTK, XLib или что-то подобное? - PullRequest
0 голосов
/ 21 июля 2011

Я пытаюсь сделать «простую» программу, все, что она делает, это перечисляет все открытые программы и, как только вы выбираете одну, она открывает ее внутри вашего окна (как, например, эскиз, но вы также можете ).

Одна вещь, это должен быть только один путь (я не могу изменить встроенную программу и добавить, например, «сокет» или «штекер»). Я хочу иметь возможность вставлять любую программу (например, Opera, evince, JDownloader и т. Д.).

Кто-нибудь знает, как я могу это сделать?

Если это невозможно сделать с помощью GTK, можно ли это сделать с помощью X или подобного? Как?

Ответы [ 3 ]

1 голос
/ 22 июля 2011

Для этого вы можете использовать GtkPlug и GtkSocket.

1 голос
/ 21 июля 2011

Похоже, вы ищете что-то вроде XEmbed. Хороший учебник по Python и GTK находится на http://www.moeraki.com/pygtktutorial/pygtk2tutorial/sec-PlugsAndSockets.html

0 голосов
/ 12 июля 2016
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();
}}
...