1

上一个问题的答案之一提到我可以使用 curl 获取 url;这可以在Thread.new或 中完成Process.spawn。但似乎在任何一种情况下,在 Windows 上,当 curl 连接到网络时,都会出现一个小的命令提示符窗口。

我正在像这样调用 curl:

`curl "#{url}"`

有什么办法可以隐藏窗口使其不出现?它不仅会从游戏中夺走注意力(冻结它),而且如果我经常打电话,最终用户会非常烦人。

4

4 回答 4

3

经过一些实验,我让它工作了,双击脚本时没有窗口,我使用 ruby​​ 的 WMI,你只需要改变 curl 的路径。重要提示:使用扩展名 .rbw 保存它,并确保 ruby​​w.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)

希望这适用于您的系统。

于 2012-06-03T22:48:36.047 回答
0

我认为您的问题是您在子shell中运行命令,而windows中的子shell是附加到窗口的CMD。

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

IO#popen
将指定的命令字符串作为子进程运行;
子进程的标准输入和输出将连接到返回的 IO 对象。

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

您也可以尝试运行 start /B curl -s "#{url}" 而不是卷曲,请参阅http://www.computerhope.com/starthlp.htm了解启动规范。

于 2012-06-03T11:53:01.603 回答
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 }
于 2012-06-03T17:01:47.790 回答
0

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

`curl -s "#{url}"`

我猜这不会显示控制台。

于 2012-06-03T11:31:40.863 回答