Ruby and WSH How?

  • Thread starter Andres M. Hidalgo
  • Start date
A

Andres M. Hidalgo

Any ideas or links to Ruby and WSH(Windows Scripting Host)?
Can I use Ruby with .HTA(HTML for applications)?.

Thanks
Andres
 
T

Takashi Sano

Hello Andres,

2005/9/1 said:
Any ideas or links to Ruby and WSH(Windows Scripting Host)?
Can I use Ruby with .HTA(HTML for applications)?.

You can do it with ActiveScriptRuby. Though I myself have not experienced t=
hat.=20

There are several sample files in samples folder of the installed location.

Takashi Sano
 
Z

Zach Dennis

Takashi said:
Hello Andres,

I have used Ruby and WSH. It is beautiful. Documentation is sparse, so
trial and error is a must, although it is really straightforward stuff
once you get used to it. Use Win32OLE to access WSH...

Example:
require 'win32ole'
wscript_shell = WIN32OLE.new( 'WScript.Shell' )
wscript_shell.Popup( 'message', 0, 'title', 1 )

Most WSH commands are executed just like you would execute them in
VBScript...

Here is an examle of how to get system drive information:
require 'win32ole'
drives = []
file_system = WIN32OLE.new( 'Scripting.FileSystemObject' )
file_system.Drives.each { |drv| drives << drv.DriveLetter }
drives

If you want any more hardcore examples I'll see what I can dig up!

Zach
 
D

Dave Burt

Zach said:
I have used Ruby and WSH. It is beautiful. Documentation is sparse...

There is good documentation around! There's the Microsoft website, which has
a complete reference to all their APIs (I think, I haven't checked them
all). But they're a megabyte per page or something ridiculous like that.

Let me recommend DevGuru.com:

WSH Reference: http://devguru.com/technologies/wsh/17346.asp
VBScript ("Scripting") library reference:
http://devguru.com/technologies/vbscript/13990.asp

I also use their quick reference for ASP programming.

Also, back to Ruby's WIN32OLE, every WIN32OLE object has an ole_methods
method which returns all its properties and methods as an array. (Although
in a recent thread I discovered that it doesn't always work; but it will
with the WShell and Scripting libraries.)

Cheers,
Dave
 
Z

Zach Dennis

Dave said:
There is good documentation around! There's the Microsoft website, which has
a complete reference to all their APIs (I think, I haven't checked them
all). But they're a megabyte per page or something ridiculous like that.

Let me recommend DevGuru.com:

WSH Reference: http://devguru.com/technologies/wsh/17346.asp
VBScript ("Scripting") library reference:
http://devguru.com/technologies/vbscript/13990.asp

I also use their quick reference for ASP programming.

Also, back to Ruby's WIN32OLE, every WIN32OLE object has an ole_methods
method which returns all its properties and methods as an array. (Although
in a recent thread I discovered that it doesn't always work; but it will
with the WShell and Scripting libraries.)

I guess I meant documentation for using WIN32OLE and WScript...etc... I
know that, documentation is one thing MS is good at... I didn't mean to
imply there wasn't documentation on WSH.

Zach
 
D

Dave Burt

Zach Dennis:
I guess I meant documentation for using WIN32OLE and WScript...etc... I
know that, documentation is one thing MS is good at... I didn't mean to
imply there wasn't documentation on WSH.

Well, you're right then. But it is pretty simple. So simple I'm going to
document it right now (ruby-doc.org?).

This is WIN32OLE, from VB:

require 'win32ole'

# Set my_com_object = CreateObject("Library.Class")
my_com_object = WIN32OLE.new("Library.Class")

# Set my_com_object = GetObject("Library.Class")
my_com_object = WIN32OLE.connect("Library.Class")

# For Each com_object In com_collection_object
# '...
# Next
for com_object in com_collection_object
#...
end

# (Press F1 and read the help?)
com_object.ole_methods #=> [Array, Of, All, Methods, And, Properties,
#=> Available, For, This, Object]

And the rest is straightforward. COM properties and methods become methods
of the WIN32OLE object. If there's a Ruby name clash (e.g. a "class"
property), you can either change the case of the method (COM's case
insensitive) (com_object.Class or com_object.cLaSs) or use [] and []=
(com_object['class'] is an lvar).

Cheers,
Dave
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
474,177
Messages
2,570,953
Members
47,507
Latest member
codeguru31

Latest Threads

Top