gpt4 book ai didi

c# - 我如何使用 Mono C# 获取有关关注 Linux 的窗口的信息

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:24:06 26 4
gpt4 key购买 nike

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

现在我打算在 Linux 上使用 Mono C# 来做同样的事情。可能吗?

如果是,我在找什么?

最佳答案

我决定看一下 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 的源代码中查看这些函数的实现。

关于c# - 我如何使用 Mono C# 获取有关关注 Linux 的窗口的信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16134124/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com