2012-07-12 58 views

回答

4

似乎有全樣本項目在這裏bitbucket.org/hindlemail/settingwmclass

示例項目展示瞭如何設置在Linux上運行的 單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); 
    } 

上述頁面有download link to the source code

+0

哇哦,我沒有發現樣本項目,謝謝!不過,你只引用瞭解決方案的一小部分。示例項目中的NativeReplacements類負責處理如何獲取X11顯示和窗口引用的所有令人討厭的細節。 – bseibold 2012-07-13 14:24:48

相關問題