在Windows上隐藏卷曲窗口

时间:2012-06-03 11:08:29

标签: ruby windows

One of the answers on a previous question提到我可以使用curl来获取网址;这可以在Thread.newProcess.spawn中完成。但似乎在任何一种情况下,在Windows上,当curl进入网络时,我会看到一个小的命令提示窗口。

我正在调用curl:

`curl "#{url}"`

有没有办法隐藏窗口以使其不显示?它不仅将焦点从游戏中移开(冻结它),而且如果我经常打电话,对最终用户来说会非常烦人。

4 个答案:

答案 0 :(得分:3)

经过一些实验,我得到它的工作,双击脚本时没有窗口,我使用ruby的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)

希望这适用于您的系统。

答案 1 :(得分:0)

您可以尝试将-s选项传递给curl,这将使其以静默模式运行。 像

这样的东西
`curl -s "#{url}"`

我猜这不会出现在控制台上。

答案 2 :(得分:0)

我认为你的问题是你在子shell中运行命令,windows中的子shell是连接到窗口的CMD。

我没有测试以下内容的红宝石,但您可以尝试:

IO#popen
Runs the specified command string as a subprocess; 
The subprocess‘s standard input and output will be connected to the returned IO object.

=>如果您可以使用IO,则http://ruby-doc.org/core-1.8.6/IO.html

你也可以尝试跑步 start /B curl -s "#{url}"而不仅仅是curl,请参阅http://www.computerhope.com/starthlp.htm了解初学规格。

答案 3 :(得分:0)

此解决方案不会在我的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 }