Ruby and WSH How?

(Andres M. Hidalgo) #1

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

Thanks
Andres

(Takashi Sano) #2

Hello Andres,

···

2005/9/1, Andres M. Hidalgo <ahidalgo@bellatlantic.net>:

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 that.

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

Takashi Sano

(Zach Dennis) #3

Takashi Sano wrote:

Hello Andres,

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

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

···

2005/9/1, Andres M. Hidalgo <ahidalgo@bellatlantic.net>:

(Dave Burt) #4

Zach wrote:

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

(Zach Dennis) #5

Dave Burt wrote:

Zach wrote:

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.)

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

(Dave Burt) #6

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