如何在Lua中使用os.execute时避免弹出窗口
2013-9-15 16:20:50
收藏:0
阅读:373
评论:3
我正在使用 os.execute() 在 Lua 中调用其他程序,当程序运行时,命令行窗口会闪烁一下,我调用 execute 超过一百次,这变得非常烦人。
所以有没有办法将窗口设置为不可见?
点赞
用户3088599
我个人对于“不行”的答复并不满意,因为我是一个工程师类型的人,必须“解决那个问题”,所以我使用了WScript.Shell,让事情能够起作用:
Shell = luacom.CreateObject("WScript.Shell")
Shell:Run (command, 0)
“0”用于阻止弹出窗口出现。 http://msdn.microsoft.com/en-us/library/d5fk67ky%28v=vs.84%29.aspx
2013-12-10 21:00:51
用户4797142
有一个额外的解决方案,我想使用 alien 库实现。
Alien 是一个访问 Windows dll 的库,可以以一种有规律的方式使用 Lua 进行访问。为了在不打开 shell 窗口的情况下执行命令文件,可以使用 Shell32.dll 中的函数 ShellExecuteA:其文档可以在这里找到,适当的方法由下面的片段描述。
require 'alien'
local shell32 = alien.load('Shell32.dll')
shell32.ShellExecuteA:types("pointer","pointer","pointer","pointer","pointer","pointer","int")
local exec = shell32.ShellExecuteA
function osexec(cmd, open)
if open then
-- 执行并打开一个窗口
exec(0,"open","cmd.exe","/C "..cmd,0,3)
else
-- 执行,不打开窗口
exec(0,"open","cmd.exe","/C "..cmd,0,0)
end
end
调用前面的函数只需使用命令即可,在不打开窗口的情况下运行。调用两个操作数 osexec ("dir", true) 则打开一个窗口,非常适合调试。
2015-04-16 14:44:52
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的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 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
短暂的回答在hjpotter的评论中得到了解答:**不行**。
以下是更详细的解释。
在Windows中,可执行文件有两种类型:GUI应用程序和命令行应用程序。这与程序的内部工作方式无关,而是取决于程序的构建方式(在PE可执行文件头中有一个标志,可以使用链接器选项来设置)。每当执行命令行应用程序时,操作系统自动弹出控制台窗口(即“丑陋的黑盒子”)。
os.execute的问题在于它在底层使用了C语言的system函数,而system函数又可能是通过执行Windows命令行可执行文件cmd.exe来实现的,该文件确实是一个命令行应用程序。因此,每次使用os.execute时,实际上都在执行cmd.exe。那个黑盒子就是与正在执行的cmd.exe相关联的控制台窗口。