1

我正在将 Mono 的 .NET Windows 应用程序转换为在 Linux (Ubuntu) 上运行。其中一项功能取决于本机库 (user32.dll)。讨论应用程序转换(Linux 平台差异)的 Mono 指南建议一种方法是修改此代码。

我正在尝试使用 GDK 访问我可以通过属性 Gdk.Global.ActiveWindow 访问的 Gdk.Window 的标题。但是我在编译时发现了这个错误:

Error CS0154: The property or indexer `Gdk.Window.Title` cannot be used in this context because it lacks the `get` accessor (CS0154) (GetActiveWindow)

如果我删除读取TitleactiveW 的 de 属性的代码,一切正常。还有另一种读取此属性的方法吗?

这是我的工作单位:

using System;
using Gtk;
using Gdk;
using System.Threading;

namespace GetActiveWindow
{
    class GdkApp : Gtk.Window
    {

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

        public GdkApp () : base("Simple App")
        {
            SetDefaultSize (150, 150);
            ShowAll();
            while (true) {
                var activeW = Gdk.Global.ActiveWindow;
                Console.WriteLine("Active Window: {0}",activeW.Title); // Where my compile error happens.
                Console.WriteLine("Simple App Window: {0}",this.Title); // This code works perfectily.
                Thread.Sleep(1000);
            }
        }
    }
}
4

1 回答 1

0

我认为使用 Gdk 是不可能的。尝试使用 Wnck 库为 C 编译器提供此“-DWNCK_I_KNOW_THIS_IS_UNSTABLE”,并且可以使用但有警告:未处理的操作类型 _OB_WM_ACTION_UNDECORATE

对不起,我用精灵代替了瓦拉。

//valac *.gs --pkg gtk+-3.0 --pkg libwnck-3.0 -X '-DWNCK_I_KNOW_THIS_IS_UNSTABLE'

init
    Gtk.init(ref args)
    var ventana= new win()
    ventana.inicio()
    ventana.printinfo()
    Gtk.main()


class win:Gtk.Window

    won:weak GLib.List of Wnck.Window

    def inicio()

        var button= new Gtk.Button()
        button.clicked.connect(printinfo)
        this.add(button)
        this.show_all()

    def printinfo()
        won= Wnck.Screen.get_default().get_windows()
        won.foreach(allwin)

    def allwin(w:Wnck.Window)
        if w.is_skip_tasklist() or w.is_skip_pager()
            pass
        else
            print w.get_name()
于 2016-05-22T23:57:28.223 回答