如何在 LUA 中获取窗口装饰像素尺寸
2019-1-15 10:18:38
收藏:0
阅读:100
评论:1
我正在使用 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
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?

devilspie2 提供了两种获取窗口大小的方法,分别为
get_window_geometry和get_window_client_geometry。其中,后者不包括窗口边框。如果这对您不起作用,您可以创建一个文件,包含所有值的表格,以便轻松编辑。如果可能的话,您还可以使用窗口类名作为表格键,以使使用更加方便。