2009-07-27 1 views
2

Я изо всех сил пытаюсь получить контроль над элементом предварительного просмотра IE, который является классом «Internet Explorer_Server» во внешнем приложении Windows с perl.Как я могу автоматизировать существующий экземпляр Internet Explorer с помощью Perl?

Internet Explorer_Server - это имя класса окна, я нашел его со Spy ++. и вот мое утверждение код этого

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

я могу получить дескриптор этого «Интернет Explorer_Server» с Win32::GUI::GetWindow, но понятия не имеют, что делать дальше.

+1

Можете ли вы пояснить, что такое *** Internet Explorer_Server ***? –

+0

* Internet Explorer_Server * - это имя класса окна, я нашел его со Spy ++. и вот мое кодовое слово $ className = Win32 :: GUI :: GetClassName ($ window); if ($ className eq «Internet Explorer_Server») { ... } – crowdy

+0

@crowdy Я обновил свой ответ в свете вашего комментария. –

ответ

5

Обновлено: Вы идете по неверному пути. Вам нужно 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__ 

Таким образом, этот код находит окно с Document собственности и печатает HTML. Вам необходимо будет определить, какие критерии вы хотите использовать, чтобы найти интересующее вас окно.

ShellWindows documentation.

+0

спасибо, но это не совсем то, что я хочу. Я не хочу создавать новый экземпляр IE. Я хочу, чтобы управление IE уже существует. – crowdy

0

Вы смотрели на Samie http://samie.sourceforge.net/, как это Perl модуль для управления IE

+1

* вздох * С чего начать? Давайте проигнорируем этот персонаж комиксов на главной странице на секунду ... Samie не на CPAN. И когда вы хотите загрузить его, все, что вы получаете, это zip-файл с установщиком в стиле окна внутри. Он упакован как проприетарный программный компонент. Кстати, на главной странице лицензия не отображается. – hillu

1

Вы можете посмотреть на Win32::IE::Mechanize. Я не уверен, можете ли вы управлять существующим IE-окном с этим модулем, но доступ к одному URL-адресу должен быть возможен примерно в пяти строках кода.

Смежные вопросы