2

vbscriptでは、ブラウザ(IE)をGUIとして使用するのが一般的です。以下の例を参照してください。名前を要求し、スクリプトに返します。RubyにはTclやShoesのようなGUIがいくつかありますが、ブラウザーでこれを行う方法がわかりません。これを行うための最も簡単なRubyソリューションは何ですか?したがって、exta gemやパッケージはなく、すでに実行されているサーバーもありません。gemが必要な場合は、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
4

4 に答える 4

5

Watir gemを使用できます。gem はもともと IE ブラウザーを駆動することを目的としていましたが、ニーズに合うでしょう。

見る:

1) Watir gem をインストールする

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) 次の watir スクリプトを実行すると、ブラウザーが開き、フォームが表示されます。名前を入力して[OK]をクリックすると、名前が出力されます。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

これは、あなたが望むことをする一般的な実現可能性を示していると思います。フォームの検証と動的な作成も可能です。

于 2012-08-02T16:57:51.550 に答える
2

一般的に Ruby では、Rails や Sinatra、Camping などを使用して Web アプリを作成します。それらはすべて宝石を必要とします。gem を使用せずに VBscript の例にもっと似たものが必要な場合は、おそらく Win32OLE を使用できます (ただし、IE を開いて対話することは試していません)。

于 2012-07-30T16:58:07.457 に答える
2

win32ole既出です。

ここにスクリプトの例があります:

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 を使用した解決策もあります。

于 2012-07-30T18:33:37.563 に答える
1

Windows用のGUIの中で最も単純なものは、控えめなコマンドプロンプトだと思います。宝石は必要ありません。上記のVBscriptコードからわかる限り、ブラウザを開いたり、コンテンツをExcelまたはテキストファイルに保存したりする必要はありません。だからあなたのミニマルなスペックで;)ここにあなたがいます..:

    puts "Give me a name" #output to cmd
    $name=gets.chomp #get a name from user 

    puts "Hello there..: #{$name}"

上記のプログラムは、GUIとしてWindows cmdを使用し、ユーザーから入力を取得して画面に出力します。次に、ボタンなどを含むフォームを使用する場合は、いくつかのフォームを使用して単純なWebサイトを作成し、次のようにロードします(1つのgem->'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)

次に、ファイルとの間で値を渡したり読み取ったりする方法についてさらに詳しく知りたい場合はお知らせください。頑張ってね!

于 2012-07-30T16:29:45.787 に答える