如何在LUA中获得窗户装饰的像素大小



我使用的是带有seamless rdp的rdesktop。这样我就可以在Linux机器上打开Windows应用程序。此外,我在混音中加入了魔鬼派2,这样我就可以控制窗户的装饰了。devillespie2使用lua作为其配置管理。我把一切都做好了。剩下的唯一问题是将打开的(对话框)窗口移动几个像素,因为VNC窗口看起来就像有装饰(但没有装饰)。我通过对移动所需的像素数量进行硬编码来获得代码。问题是我们这里有不止一个发行版,它们的窗户装饰有不同的像素大小。

我想要的是获得以像素为单位的装饰大小,而不是对它们进行硬编码,这样它将完美地适用于我的所有发行版。

这是一段自动取款机的代码:

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

devillapi2只提供了两种获取窗口大小的方法,get_window_geometryget_window_client_geometry

其中,最后一个排除了窗口边界。如果这对您不起作用,您可以为所有值创建一个带有表的文件,使其易于编辑。如果可能的话,您也可以使用窗口类名作为表键,以使使用更容易。

最新更新