[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

AutoIt over Ruby question - How do I call ObjGet()?

sean_n

4/12/2008 12:40:00 PM

Here's an example of using autoit inside of ruby.

require 'win32ole'
autoit = WIN32OLE.new("AutoItX3.Control")
autoit.WinActivate('Yahoo!')

So if this works, how come this doesn't work?

require 'win32ole'
autoit = WIN32OLE.new("AutoItX3.Control")
obj=autoit.ObjGet('','InternetExplorer.Application')

How do I call the ObjGet() function? In other words, what COM object
contains that method?

5 Answers

David Mullet

4/12/2008 3:37:00 PM

0

sean_n wrote:
> Here's an example of using autoit inside of ruby.
>
> require 'win32ole'
> autoit = WIN32OLE.new("AutoItX3.Control")
> autoit.WinActivate('Yahoo!')
>
> So if this works, how come this doesn't work?
>
> require 'win32ole'
> autoit = WIN32OLE.new("AutoItX3.Control")
> obj=autoit.ObjGet('','InternetExplorer.Application')
>
> How do I call the ObjGet() function? In other words, what COM object
> contains that method?

I can't offer much help with regard to AutoIt, but you can connect to an
existing instance of IE using win32ole and the Shell object's Windows
collection:

ie = nil
for window in WIN32OLE.new('Shell.Application').Windows
begin
if window.Document.Title =~ /Yahoo/
ie = window
end
rescue
end
end

Further details here:

http://rubyonwindows.bl.../2007/05/shell-windows-collection-of-int...

Hope that helps!

David

http://rubyonwindows.bl...
--
Posted via http://www.ruby-....

William James

4/13/2008 8:40:00 AM

0

On Apr 12, 10:36 am, David Mullet <david.mul...@gmail.com> wrote:
> sean_n wrote:
> > Here's an example of using autoit inside of ruby.
>
> > require 'win32ole'
> > autoit = WIN32OLE.new("AutoItX3.Control")
> > autoit.WinActivate('Yahoo!')
>
> > So if this works, how come this doesn't work?
>
> > require 'win32ole'
> > autoit = WIN32OLE.new("AutoItX3.Control")
> > obj=autoit.ObjGet('','InternetExplorer.Application')
>
> > How do I call the ObjGet() function? In other words, what COM object
> > contains that method?
>
> I can't offer much help with regard to AutoIt, but you can connect to an
> existing instance of IE using win32ole and the Shell object's Windows
> collection:
>
> ie = nil
> for window in WIN32OLE.new('Shell.Application').Windows
> begin
> if window.Document.Title =~ /Yahoo/
> ie = window
> end
> rescue
> end
> end

This seems not to work.

require 'win32ole'
ie = nil
WIN32OLE.new('Shell.Application').Windows.each do |window|
p window.FullName
p window.Name
begin
title = window.Document.Title
p title
if title =~ /Internet Explorer/
ie = window
end
rescue
end
end
p ie

--- output ---
"C:\\Program Files\\Internet Explorer\\IEXPLORE.EXE"
"Microsoft Internet Explorer"
""
nil

David Mullet

4/13/2008 12:21:00 PM

0

William James wrote:
> This seems not to work.
>
> require 'win32ole'
> ie = nil
> WIN32OLE.new('Shell.Application').Windows.each do |window|
> p window.FullName
> p window.Name
> begin
> title = window.Document.Title
> p title
> if title =~ /Internet Explorer/
> ie = window
> end
> rescue
> end
> end
> p ie
>
> --- output ---
> "C:\\Program Files\\Internet Explorer\\IEXPLORE.EXE"
> "Microsoft Internet Explorer"
> ""
> nil

A key distinction here is between window.Name and window.Document.Title

David Mullet

4/13/2008 10:57:00 PM

0

On Apr 13, 8:20 am, David Mullet <david.mul...@gmail.com> wrote:
> William James wrote:
> > This seems not to work.
>
> > require 'win32ole'
> > ie = nil
> > WIN32OLE.new('Shell.Application').Windows.each do |window|
> > p window.FullName
> > p window.Name
> > begin
> > title = window.Document.Title
> > p title
> > if title =~ /Internet Explorer/
> > ie = window
> > end
> > rescue
> > end
> > end
> > p ie
>
> > --- output ---
> > "C:\\Program Files\\Internet Explorer\\IEXPLORE.EXE"
> > "Microsoft Internet Explorer"
> > ""
> > nil
>
> A key distinction here is between window.Name and window.Document.Title

[Re-posting my reply, as it seems to have been truncated on Google
Groups...]

A key distinction here is between window.Name and
window.Document.Title.

window.Document.Title is the Title as defined in the HTML code of a
window with a Type of "HTML Document". This probably equates to the
window.LocationName property. The titlebar text will include both
window.Document.Title and window.Name, so...

if window.Document.Title =~ /Internet Explorer/

will usually NOT work, though...

if window.Name =~ /Internet Explorer/

....would work.

To grab an IE window from the Shell.Application.Windows collection...

You could test the Type property:

if window.Type == 'HTML Document'

or you could test the window.Name property:

if window.Name =~ /Internet Explorer/

But to grab a *particular* IE window from the
Shell.Application.Windows
collection, you could use the window.Document.Title or
window.LocationName property

if window.Document.Title =~ /Yahoo/

if window.LocationName =~ /Yahoo/

David

http://rubyonwindows.bl...

William James

4/13/2008 11:48:00 PM

0

On Apr 13, 5:56 pm, mully <david.mul...@gmail.com> wrote:
> On Apr 13, 8:20 am, David Mullet <david.mul...@gmail.com> wrote:
>
>
>
> > William James wrote:
> > > This seems not to work.
>
> > > require 'win32ole'
> > > ie = nil
> > > WIN32OLE.new('Shell.Application').Windows.each do |window|
> > > p window.FullName
> > > p window.Name
> > > begin
> > > title = window.Document.Title
> > > p title
> > > if title =~ /Internet Explorer/
> > > ie = window
> > > end
> > > rescue
> > > end
> > > end
> > > p ie
>
> > > --- output ---
> > > "C:\\Program Files\\Internet Explorer\\IEXPLORE.EXE"
> > > "Microsoft Internet Explorer"
> > > ""
> > > nil
>
> > A key distinction here is between window.Name and window.Document.Title
>
> [Re-posting my reply, as it seems to have been truncated on Google
> Groups...]
>
> A key distinction here is between window.Name and
> window.Document.Title.
>
> window.Document.Title is the Title as defined in the HTML code of a
> window with a Type of "HTML Document". This probably equates to the
> window.LocationName property. The titlebar text will include both
> window.Document.Title and window.Name, so...

The problem was that I had no html document loaded; the titlebar
text was "about:blank - Microsoft Internet Explorer" but
window.Document.Title was simply "".