in reply to Re: Re: The behavior of Win32::OLE->new
in thread The behavior of Win32::OLE->new

Hmm. On Win2K/IE6 and Win98/IE5.5, both l3nz snippet and mine work for me, and you don't have Windows Script Host.

What version of Windows and IE are you running?

  • Comment on Re: Re: Re: The behavior of Win32::OLE->new

Replies are listed 'Best First'.
Re: Re: Re: Re: The behavior of Win32::OLE->new
by marynella (Novice) on Nov 21, 2003 at 10:11 UTC
    I have WinXP Profesional/IE6.0.

    I don't need just 2 windows(IE) to be opened. More: each IE to run in a diffrent process.(when you look in Taskmng you should see 2 IE).

    l3nz's solution solves this problem but added a new problem:
    How I close IE when I've done with it? witch I've solved using JavaScript in the file opened in IE.

    I've Install Windows Script Host and I still get this error: Can't start ShellWin32::OLE(0.17) error 0x80040154: "Class not registered"

      Why do they need to be different processes?

      Have a look at Win32::Process, it creates processes using the Windows API. A quick test shows that each explorer window shows up as its own process. It also includes a kill method that kills a given process ID.

      I'm not sure that Win32::Process ships with ActiveState perl, but ppm shows a couple of versions available.

      A quick proof-of-concept follows...

      use strict; use warnings; use Win32::Process; use Win32; sub ErrorReport{ print Win32::FormatMessage( Win32::GetLastError()) } my @processes; for (0, 1) { my $tmpPO; Win32::Process::Create($tmpPO, "F:\\Program Files\\Internet Explorer\\IEXPLORE.EXE", "", 0, CREATE_NEW_PROCESS_GROUP, "." )|| die ErrorReport(); push @processes, $tmpPO; print "Process $_ created: Process ID is ", $processes[$_]->GetProcessID, ".\n"; } print "Press enter to kill current processes:"; <STDIN>; $processes[$_]->Kill(0) for (0, 1);