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.blogspot.com