Использовать браузер в качестве графического интерфейса в Ruby
В vbscript обычно используется браузер (IE) в качестве графического интерфейса.
См. Пример ниже, он запрашивает имя и возвращает его в script. В Ruby у вас есть несколько графических интерфейсов, таких как Tcl и Shoes, но мне интересно, как это сделать в браузере. Какое самое простое решение Ruby для этого? Таким образом, нет exta gems или пакетов, нет сервера, который уже запущен. Если требуется камень, желательно тот, который работает в Windows без проблем.
Здесь пример vbscript
Set web = CreateObject("InternetExplorer.Application")
If web Is Nothing Then
msgbox("Error while loading Internet Explorer")
Wscript.Quit
Else
with web
.Width = 300
.Height = 175
.Offline = True
.AddressBar = False
.MenuBar = False
.StatusBar = False
.Silent = True
.ToolBar = False
.Navigate "about:blank"
.Visible = True
end with
End If
'Wait for the browser to navigate to nowhere
Do While web.Busy
Wscript.Sleep 100
Loop
'Wait for a good reference to the browser document
Set doc = Nothing
Do Until Not doc Is Nothing
Wscript.Sleep 100
Set doc = web.Document
Loop
'Write the HTML form
doc.Write "Give me a name<br><form><input type=text name=name ><input type=button name=submit id=submit value='OK' onclick='javascript:submit.value=""Done""'></form>"
Set oDoc = web.Document
Do Until oDoc.Forms(0).elements("submit").Value <> "OK"
Wscript.Sleep 100
If web Is Nothing or Err.Number <> 0 Then
msgbox "Window closed"
Wscript.Quit
End If
Loop
name = oDoc.Forms(0).elements("name").value
oDoc.close
set oDoc = nothing
web.quit
set web = nothing
Wscript.echo "Hello " & name
Ответы
Ответ 1
Вы можете использовать драгоценный камень Ватира. Первоначально камень предназначался для запуска браузера IE, но он соответствовал бы вашим потребностям.
Чтобы увидеть:
1) Установите драгоценный камень Watir
2) Создайте файл test.htm со следующим:
Give me a name<br>
<form name="myForm" title="myForm">
<input type="text" id="name" >
<input id="submit" type="button" value="OK" onclick='document.myForm.submit.value="Done"'>
</form>
3) Запустите следующий файл script, который откроет браузер для вашей формы. После ввода имени и нажатия [OK] выдается имя. Обратите внимание, что вам может потребоваться изменить расположение файла в script в зависимости от того, где вы сохранили test.htm:
require 'watir'
b = Watir::IE.new
begin
b.goto('file:///C:/Documents%20and%20Settings/Setup/Desktop/test.htm')
begin
sleep(5)
end until b.button(:id, 'submit').value != "OK"
name = b.text_field.value
ensure
b.close
end
puts name
Я думаю, что это показывает общую возможность делать то, что вы хотите. Валидация и динамическое создание форм также будут возможны.
Ответ 2
Как правило, в Ruby люди используют что-то вроде Rails, Sinatra или Camping для создания веб-приложений. Все они требуют драгоценных камней. Если вам нужно что-то более похожее на ваш пример VBscript, без использования камней, вы, вероятно, можете использовать Win32OLE (хотя я не пробовал его открывать и взаимодействовать с IE).
Ответ 3
win32ole
уже .
Здесь пример script:
require 'win32ole'
def inputbox( message, title="Message from #{__FILE__}" )
# returns nil if 'cancel' is clicked
# returns a (possibly empty) string otherwise
# hammer the arguments to vb-script style
vb_msg = %Q| "#{message.gsub("\n",'"& vbcrlf &"')}"|
vb_msg.gsub!( "\t", '"& vbtab &"' )
vb_msg.gsub!( '&""&','&' )
vb_title = %Q|"#{title}"|
# go!
sc = WIN32OLE.new( "ScriptControl" )
sc.language = "VBScript"
sc.eval(%Q|Inputbox(#{vb_msg}, #{vb_title})|)
#~ sc.eval(%Q|Inputbox(#{vb_msg}, #{vb_title}, aa,hide)|)
end
#simple use
res = inputbox "Your input please."
p res
Чтобы предоставить окно сообщения, вы можете использовать:
require 'win32ole'
def popup(message)
wsh = WIN32OLE.new('WScript.Shell')
wsh.popup(message, 0, __FILE__)
end
В http://rubyonwindows.blogspot.com/2007/04/ruby-excel-inputbox-hack.html (источник этих примеров) вы также найдете решение с Excel.
Ответ 4
Ну, я считаю, что самым простым из GUI для Windows является скромное командное приглашение. Нет необходимости в драгоценных камнях, и, насколько я вижу из кода VBscript выше, вам не нужно открывать браузеры или сохранять содержимое в Excel или текстовом файле. Итак, с вашими минималистскими спецификациями;) здесь вы..:
puts "Give me a name" #output to cmd
$name=gets.chomp #get a name from user
puts "Hello there..: #{$name}"
В приведенной выше программе будет использоваться Windows cmd в качестве графического интерфейса пользователя и будет получать вход от пользователя и выводить его на экран. Затем, если вы хотите использовать формы с кнопками и т.д., Создайте простой веб-сайт с несколькими формами и загрузите его следующим образом (требуется один камень → "selenium-webdriver" )
require "selenium-webdriver" #selenium lib
driver = Selenium::WebDriver.for :firefox
!30.times { if (driver.navigate.to("http://www.google.com") rescue false) then break else sleep 1; end } #loop that will try 30times (once every sec to access the google.com)
Тогда дайте мне знать, если вам нужно больше узнать, как передавать/считывать значения из/в файл. Удачи!