代码之家  ›  专栏  ›  技术社区  ›  shafuq

如何获取Lua中的窗口装饰像素大小

  •  0
  • shafuq  · 技术社区  · 6 年前

    我正在使用RDESKTOP和SeamlessRDP。这样我就可以在Linux机器上打开Windows应用程序。我还加入了Devilspei2,这样我就可以控制窗户的装饰。devilspei2使用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
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   Phisn    6 年前

    DaviSpIIE2 仅提供两种获取窗口大小的方法, get_window_geometry get_window_client_geometry .

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