2009-07-27 2 views
2

J'ai du mal à obtenir le contrôle d'un contrôle d'aperçu IE qui est la classe 'Internet Explorer_Server' sur une application Windows externe avec perl.Comment puis-je automatiser une instance existante d'Internet Explorer en utilisant Perl?

Internet Explorer_Server est le nom de classe de la fenêtre, je l'ai trouvé avec Spy ++. et voici mon code affirmation de celui-ci

$className = Win32::GUI::GetClassName($window); 
if ($className eq "Internet Explorer_Server") { 
    ... 
} 

je peux obtenir une poignée de cette « Internet Explorer_Server » avec Win32::GUI::GetWindow, mais ont aucune idée de quoi faire.

+1

Pouvez-vous clarifier ce que *** Internet Explorer_Server *** est? –

+0

* Internet Explorer_Server * est le nom de classe de la fenêtre, je l'ai trouvé avec Spy ++. et voici mon code d'assertion $ className = Win32 :: GUI :: GetClassName ($ window); if ($ className eq "Internet Explorer_Server") { ... } – crowdy

+0

@crowdy J'ai mis à jour ma réponse à la lumière de votre commentaire. –

Répondre

5

Mise à jour: Vous allez dans la mauvaise direction. Ce dont vous avez besoin est Win32::OLE.

#!/usr/bin/perl 

use strict; 
use warnings; 

use Win32::OLE; 
$Win32::OLE::Warn = 3; 

my $shell = get_shell(); 
my $windows = $shell->Windows; 

my $count = $windows->{Count}; 

for my $item (1 .. $count) { 
    my $window = $windows->Item($item); 
    my $doc = $window->{Document}; 
    next unless $doc; 
    print $doc->{body}->innerHTML; 
} 

sub get_shell { 
    my $shell; 
    eval { 
     $shell = Win32::OLE->GetActiveObject('Shell.Application'); 
    }; 

    die "[email protected]\n" if [email protected]; 

    return $shell if defined $shell; 

    $shell = Win32::OLE->new('Shell.Application') 
     or die "Cannot get Shell.Application: ", 
       Win32::OLE->LastError, "\n"; 
} 
__END__ 

Ainsi, ce code trouve une fenêtre avec une propriété Document et imprime le code HTML. Vous devrez décider quels critères vous voulez utiliser pour trouver la fenêtre qui vous intéresse.

ShellWindows documentation.

+0

merci, mais ce n'est pas exactement ce que je veux. Je ne veux pas créer une nouvelle instance d'IE. Je veux que le contrôle d'IE existe déjà. – crowdy

0

Avez-vous regardé Samie http://samie.sourceforge.net/ comme cela est un module Perl pour contrôler IE

+1

* soupir * Par où commencer? Ignorons ce personnage de bande dessinée sur la page d'accueil une seconde ... Samie n'est pas sur CPAN. Et quand vous voulez le télécharger, tout ce que vous obtenez est un fichier zip avec un installateur de style Windows à l'intérieur. Il est emballé comme un composant logiciel propriétaire. En parlant de cela, sur la page d'accueil, la licence n'est pas affichée. – hillu

1

Vous pouvez jeter un oeil à Win32::IE::Mechanize. Je ne suis pas sûr si vous pouvez contrôler une fenêtre IE existante avec ce module, mais l'accès à une seule URL devrait être possible dans environ cinq lignes de code.

Questions connexes