Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how to avoid popup a window when use os.execute in lua

Tags:

windows

lua

I am using os.execute() to call other program in Lua, when program run,the cmd windows will popup for a blink, and I call the execute more than hundred times, and it become annoying. So is there any way to set the window invisible?

like image 664
user2666334 Avatar asked Sep 14 '13 03:09

user2666334


2 Answers

I personally wasn't happy with the "No, you can't" answer and being the Engineer type of guy that just has to "SOLVE THAT PROBLEM", I was able to get things to work using WScript.Shell:

Shell = luacom.CreateObject("WScript.Shell")
Shell:Run (command, 0)

The "0" is used to suppress the popup from occurring. http://msdn.microsoft.com/en-us/library/d5fk67ky%28v=vs.84%29.aspx

like image 66
Mark Newland Avatar answered Nov 20 '22 19:11

Mark Newland


The short answer was given by hjpotter in a comment: no, you can't.

A longer explanation follows.

On Windows executable files come in "two flavors": GUI applications and command line applications. This has nothing to do with the inner workings of the program, but it depends on how the program was built (there is a flag for it in the PE executable header which can be set using a linker option). It is the OS that automatically pops up a console window (the "ugly black box") when a command line application is executed.

The problem with os.execute is that it uses C system function under the hood, which in turn is probably implemented by executing the Windows command shell executable cmd.exe, which is a command line application. Thus every time you use os.execute you are indeed executing cmd.exe. That black box is the console window associated with cmd.exe being executed.

like image 3
Lorenzo Donati -- Codidact.com Avatar answered Nov 20 '22 18:11

Lorenzo Donati -- Codidact.com