首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在LUA中获得窗口装饰像素大小

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

Stack Overflow用户
提问于 2019-01-15 08:14:34
回答 1查看 306关注 0票数 0

我使用的是带有无缝with的r桌面。这样我就可以在我的Linux机器上打开Windows应用程序。此外,我还添加了devilspie2到混合,以便我可以控制窗口装饰。devilspie2使用lua作为它的配置管理。我把一切都搞定了。剩下的唯一问题是将打开(对话框)窗口移动几个像素,因为VNC窗口看起来好像有装饰(但没有它们)。我通过硬编码移动像素的数量来实现代码的工作。问题是,我们这里有多个发行版,它们的窗口装饰有不同的像素大小。

我想要的是得到装饰大小的像素,而不是硬编码他们,这样它将完美地工作在我的所有发行版。

下面是自动取款机的代码:

代码语言:javascript
复制
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

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

编辑(回答):

尽管我在下面的帖子之前找到了答案,但我还是想接受它,因为它确实指明了正确的道路。我只想在此作进一步的评论,以提供完整的答覆:

代码语言:javascript
复制
--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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-15 09:50:32

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54194918

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档