[英]Receive a signal when the window in focus is maximized and when it leaves maximized mode
我正在编写一个将作为守护程序运行的脚本。 我需要检查屏幕上是否有一个最大化的窗口,以及焦点没有最大化的窗口,然后在两种情况下都运行我的脚本(bash)。 有人可以帮我吗?
我不知道有任何可用的现成解决方案,但是您可以利用libwnck轻松完成要求的工作。 在下面的非常基本的示例中,该示例捕获了当前屏幕上的所有最大化:
/* gcc $(pkg-config --cflags --libs libwnck-1.0) test.c -o test */
#include <gdk/gdk.h>
#define WNCK_I_KNOW_THIS_IS_UNSTABLE
#include <libwnck/libwnck.h>
static void
geometry_changed(WnckWindow *window)
{
if (wnck_window_is_maximized(window)) {
g_print("A window has been maximized\n");
}
}
static void
window_opened(WnckScreen *screen, WnckWindow *window)
{
g_signal_connect(window, "geometry-changed",
G_CALLBACK(geometry_changed), NULL);
/* Force a geometry-changed emission on already opened windows:
* remove it if you need to catch only *new* maximizations */
geometry_changed(window);
}
gint
main(gint argc, gchar *argv[])
{
GMainLoop *loop;
WnckScreen *screen;
gdk_init(&argc, &argv);
screen = wnck_screen_get(0);
g_signal_connect(screen, "window-opened",
G_CALLBACK(window_opened), NULL);
loop = g_main_loop_new(NULL, FALSE);
g_main_loop_run(loop);
g_main_loop_unref(loop);
return 0;
}
如果您想知道窗口焦点何时更改,可以将回调函数连接到相关WnckScreen
的active-window-changed
信号上,例如以下未经测试的代码段:
static void
active_window_changed(WnckScreen *screen)
{
WnckWindow *active_window = wnck_screen_get_active_window(screen);
if (wnck_window_is_maximized(active_window)) {
g_print("The active window is maximized\n");
}
}
...
g_signal_connect(screen, "active-window-changed",
G_CALLBACK(active_window_changed), NULL);
...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.