4 votes

Comment puis-je changer WM_CLASS pour une application WinForms sur Linux?

J'ai une application .NET multiplateforme qui utilise WinForms.

Pour une meilleure compatibilité avec Unity, j'aimerais définir la propriété WM_CLASS d'une fenêtre WinForms. Est-ce possible ?

5voto

Preet Sangha Points 39414

Il semble y avoir un projet complet ici sur bitbucket.org/hindlemail/settingwmclass:

Projet d'exemple montrant comment définir la propriété X11 WM_CLASS pour une application winform mono s'exécutant sur Linux. Cela permet aux applications winforms mono de mieux se comporter avec les gestionnaires de fenêtres unity + gnome3.

    // Structure managée de XSetClassHint.
    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);
    }   

La page ci-dessus a un lien de téléchargement vers le code source:

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X