上一个问题的答案之一提到,我可以使用curl来获取url; 这可以在Thread.new
或Process.spawn
。 但似乎无论在哪种情况下,在Windows上,当curl传出到networking时,我都会看到一个小的命令提示符窗口。
我像这样调用curl:
`curl "#{url}"`
有没有办法隐藏窗口,使其不会出现? 它不仅从游戏中获得了焦点(冻结它),但是如果我经常打电话,这对最终用户来说是非常烦人的。
经过一番尝试,我得到了它的工作,没有窗口,当双击脚本,我使用红宝石的WMI,你只需要改变卷曲的路径。 重要说明:将其保存为扩展名.rbw,并确保rubyw.exe与该扩展名相关联。
#hidden_curl.rbw require 'win32ole' HIDDEN_WINDOW = 0 cmd = '"C:\\Program Files\\curl\\curl.exe" --output c:\\test2.txt "http://stackoverflow.com/questions/10869789/hiding-curl-window-on-windows"' objStartup = WIN32OLE.connect("winmgmts:\\\\.\\root\\cimv2:Win32_ProcessStartup") objConfig = objStartup.SpawnInstance_ objConfig.ShowWindow = HIDDEN_WINDOW objProcess = WIN32OLE.connect("winmgmts:root\\cimv2:Win32_Process") errReturn = objProcess.Create(cmd, nil, objConfig, nil)
希望这可以在你的系统上运行。
您可以尝试传递-s选项来使其以静音模式运行。 就像是
`curl -s "#{url}"`
我猜这不会显示控制台。
我认为你的问题是,你在一个子shell中运行命令,Windows中的子shell是连接到一个窗口的CMD。
我没有红宝石测试以下,但你可以尝试:
IO#POPEN 将指定的命令字符串作为子进程运行; 子进程的标准输入和输出将连接到返回的IO对象。
=> http://ruby-doc.org/core-1.8.6/IO.html如果你可以使用IO
你也可以尝试运行start /B curl -s "#{url}"
而不是curl,参见http://www.computerhope.com/starthlp.htm了解启动规范。
这个解决方案不会在我的W7系统上弹出一个窗口
cmd = '"C:\Program Files\curl\curl.exe" --silent --output c:\test.txt "http://stackoverflow.com/questions/10869789/hiding-curl-window-on-windows"' IO.popen(cmd)
或者不创建文件
cmd = '"C:\Program Files\curl\curl.exe" --silent "http://stackoverflow.com/questions/10869789/hiding-curl-window-on-windows"' IO.popen(cmd, "w+") { |io| puts io.readlines }