4

WinForms を使用するクロスプラットフォームの .NET アプリがあります。

WM_CLASSUnity との互換性を高めるために、WinForms ウィンドウのプロパティを設定したいと思います。これは可能ですか?

4

1 に答える 1

5

ここbitbucket.org/hindlemail/settingwmclassに完全なサンプル プロジェクトがあるようです:

Linux で実行されている mono winform アプリケーションの WM_CLASS X11 プロパティを設定する方法を示すサンプル プロジェクト。これにより、単一の winforms アプリケーションが unity + gnome3 ウィンドウ マネージャーでより適切に動作するようになります。

    // Managed struct of XSetClassHint classHint.
    public struct XClassHint
    {
        public IntPtr res_name; 
        public IntPtr res_class;
    }       


    [DllImport ("libX11", EntryPoint="XSetClassHint", CharSet=CharSet.Ansi)]
    public extern static int XSetClassHint(IntPtr display, IntPtr window, IntPtr classHint);


    public static void SetWmClass(string name, string @class, IntPtr handle)
    {           
        var a = new NativeX11Methods.XClassHint { 
                        res_name = Marshal.StringToCoTaskMemAnsi(name), 
                        res_class = Marshal.StringToCoTaskMemAnsi(@class) 
                    };
        IntPtr classHints = Marshal.AllocCoTaskMem(Marshal.SizeOf(a));
        Marshal.StructureToPtr(a, classHints, true);
          NativeX11Methods.XSetClassHint(NativeReplacements.MonoGetDisplayHandle(),     NativeReplacements.MonoGetX11Window(handle), classHints);           

        Marshal.FreeCoTaskMem(a.res_name);
        Marshal.FreeCoTaskMem(a.res_class);

        Marshal.FreeCoTaskMem(classHints);
    }   

上記のページには、ソース コードへのダウンロード リンクがあります

于 2012-07-12T14:11:53.510 に答える