WinForms を使用するクロスプラットフォームの .NET アプリがあります。
WM_CLASS
Unity との互換性を高めるために、WinForms ウィンドウのプロパティを設定したいと思います。これは可能ですか?
WinForms を使用するクロスプラットフォームの .NET アプリがあります。
WM_CLASS
Unity との互換性を高めるために、WinForms ウィンドウのプロパティを設定したいと思います。これは可能ですか?
ここ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);
}
上記のページには、ソース コードへのダウンロード リンクがあります。