我如何获得关于使用Mono c#关注Linux的窗口的信息

本文关键字:Linux 关注 窗口 信息 Mono 何获得 于使用 | 更新日期: 2023-09-27 18:10:18

我已经使用Windows用户组件(user32.dll)开发了一个c# . net WindowsForms应用程序,该应用程序在每次用户更改焦点时保存活动窗口(具有焦点的窗口)的标题。

现在我计划在Linux上使用Mono c#做同样的事情。这可能吗?

如果是,我在找什么?

我如何获得关于使用Mono c#关注Linux的窗口的信息

我决定看看gnome-screenshot的源代码,它有这样一个功能(只截取活动窗口的屏幕截图):

static GdkWindow *
screenshot_find_active_window (void)
{
  GdkWindow *window;
  GdkScreen *default_screen;
  default_screen = gdk_screen_get_default ();
  window = gdk_screen_get_active_window (default_screen);
  return window;
}

当上面没有返回任何结果时,它有一些逻辑回退到'鼠标指针下的窗口':

GdkWindow *
do_find_current_window (void)
{
  GdkWindow *current_window;
  GdkDeviceManager *manager;
  GdkDevice *device;
  current_window = screenshot_find_active_window ();
  manager = gdk_display_get_device_manager (gdk_display_get_default ());
  device = gdk_device_manager_get_client_pointer (manager);
  /* If there's no active window, we fall back to returning the
   * window that the cursor is in.
   */
  if (!current_window)
    current_window = gdk_device_get_window_at_position (device, NULL, NULL);
  if (current_window)
    {
      if (screenshot_window_is_desktop (current_window))
    /* if the current window is the desktop (e.g. nautilus), we
     * return NULL, as getting the whole screen makes more sense.
         */
        return NULL;
      /* Once we have a window, we take the toplevel ancestor. */
      current_window = gdk_window_get_toplevel (current_window);
    }
  return current_window;
}

据我所知,上述所有功能都只依赖于libgdk-pixbuf。如果没有这个选项,您可以查看Gdk源代码中这些函数的实现。