如何在LUA中获取窗口装饰像素大小

时间:2019-01-15 08:14:34

标签: lua window-decoration

我正在将rdesktop与Seamlessrdp一起使用。这样,我可以在Linux机器上打开Windows应用程序。另外,我还添加了devilspie2以便可以控制窗户装饰。 devilspie2使用lua作为其配置管理。我使一切正常。剩下的唯一问题是将打开(对话)窗口移动几个像素,因为VNC窗口将看起来好像它们有装饰(但没有装饰)。我通过硬编码移动所需的像素数量来使代码起作用。问题是我们这里有多个发行版,它们的窗口装饰有不同的像素大小。

我想要的是获得装饰尺寸(以像素为单位),而不是对其进行硬编码,因此它可以完美地适合我的所有发行版。

这是执行atm的一段代码:

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

    --x-1 and y-28 works for one distro but for the other I need to use x-6 and y-27
    if get_window_type()=="WINDOW_TYPE_DIALOG" then
        x, y = xy();
        xy(x-1, y-28);
    end
end

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

编辑(答案):

即使我在下一篇文章之前找到了答案,但我还是想接受它,因为它确实显示了正确的方法。我只是在这里进一步评论以显示完整答案:

--get x and y's for decorated and non-decorated windows
x1, y1, width1, height1 = get_window_geometry();
x2, y2, width2, height2 = get_window_client_geometry();

--calculate pixels to slide window
xpixel = x2-x1;
ypixel = y2-y1;


--check if class is seamlessrdp
if get_window_class()=="SeamlessRDP" then
    undecorate_window();

    --if window is a dialog then move it
    if get_window_type()=="WINDOW_TYPE_DIALOG" then
        xy(x1-xpixel, y1-ypixel);
    end
end

1 个答案:

答案 0 :(得分:1)

devilspie2 仅提供两种获取窗口大小的方法:get_window_geometryget_window_client_geometry

因此,最后一个不包括窗口边框。如果这对您不起作用,则可以为所有值创建一个带有表的文件,以使其易于编辑。如果可能的话,还可以将窗口类名称用作表键。