如何在 LUA 中获取窗口装饰像素尺寸

我正在使用 seamlessrdp 进行 rdesktop。这样我就可以在我的 Linux 机器上打开 Windows 应用程序。此外,我还将 devilspie2 添加到了这个组合中,以便我可以控制窗口装饰。devilspie2 使用 lua 作为其配置管理。我让一切都正常工作了。唯一的问题是将打开(对话框)窗口移动几个像素,因为 VNC 窗口会出现似乎装饰(但没有装饰)的样子。我通过硬编码所需移动的像素数量来使代码工作。问题是我们这里有多个发行版,它们的窗口装饰有不同的像素尺寸。

我想要的是获取装饰像素的尺寸,而不是将它们硬编码,这样它就可以完美地适用于我的所有发行版。

这是目前完成它的代码片段:

if get_window_class()=="SeamlessRDP" then
    undecorate_window();

    -- x-1 和 y-28 适用于一个发行版,但对于另一个,我需要使用 x-6 和 y-27
    if get_window_type()=="WINDOW_TYPE_DIALOG" then
        x, y = xy();
        xy(x-1, y-28);
    end
end

正如您从脚本中看到的那样,如果我能以某种方式调用窗口装饰的大小,然后使用它们而不是硬编码像素,那将会更好。

编辑(答案):

尽管我在下面的帖子之前找到了答案,但我仍想接受它,因为它确实显示了正确的路径。我只是在这里进一步评论以显示完整的答案:

-- 获取有装饰和无装饰窗口的 x 和 y
x1,y1,width1,height1 = get_window_geometry();
x2,y2,width2,height2 = get_window_client_geometry();

-- 计算幻灯片窗口的像素
xpixel = x2-x1;
ypixel = y2-y1;

-- 检查类是否无缝rdp
if get_window_class()=="SeamlessRDP" then
    undecorate_window();

    --如果窗口是对话框,则将其移动
    if get_window_type()=="WINDOW_TYPE_DIALOG" then
        xy(x1-xpixel,y1-ypixel);
    end
end
点赞
用户9185797
用户9185797

devilspie2 提供了两种获取窗口大小的方法,分别为 get_window_geometryget_window_client_geometry

其中,后者不包括窗口边框。如果这对您不起作用,您可以创建一个文件,包含所有值的表格,以便轻松编辑。如果可能的话,您还可以使用窗口类名作为表格键,以使使用更加方便。

2019-01-15 09:50:32