Did you try looking into the "WithEvents" method?
I gave it a shot in the dark, but it didn't work,
but then again I don't work with Win32::OLE at all so maybe I missed something
That's what you need ;)(i took the while loop out and replaced it with a call to MessageLoop(), otherwise you can't process messages ie events )
#!/usr/bin/perl
use strict;
use warnings;
use Win32::OLE qw[ EVENTS ];
use Win32::OLE::Variant;
#Win32::OLE->Initialize(Win32::OLE::COINIT_MULTITHREADED);
#Win32::OLE::COINIT_OLEINITIALIZE
my $Agent = Win32::OLE->new('Agent.Control.2');
$Agent->{Connected} = Variant(VT_BOOL, 1);
$Agent->Characters->Load('Merlin','Merlin.acs');
Win32::OLE->WithEvents($Agent, \&Event);
my $Char = $Agent->Characters('Merlin');
$Char->Commands->Add('Exit','E&xit');
$Char->Show;
$Char->Speak('Sleeping...');
Win32::OLE->MessageLoop();
sub Event {
my ($Obj,$Event,@Args) = @_;
use Data::Dumper;
print "Event triggered: '$Event' => \n".Dumper(\@Args);
exit(0) if ref $Args[0] and $Args[0]->{Name} eq 'Exit';
}
__END__
Event triggered: 'Show' =>
$VAR1 = [
'Merlin',
4
];
Event triggered: 'ActivateInput' =>
$VAR1 = [
'Merlin'
];
Event triggered: 'BalloonShow' =>
$VAR1 = [
'Merlin'
];
Event triggered: 'Click' =>
$VAR1 = [
'Merlin',
2,
0,
60,
92
];
Event triggered: 'BalloonHide' =>
$VAR1 = [
'Merlin'
];
Event triggered: 'Command' =>
$VAR1 = [
bless( {
'Count' => 1,
'Name' => 'Exit',
'CharacterID' => 'Merlin',
'Confidence' => 100,
'Voice' => '',
'Alt1Name' => '',
'Alt1Confidence' => 0,
'Alt1Voice' => '',
'Alt2Name' => '',
'Alt2Confidence' => 0,
'Alt2Voice' => ''
}, 'Win32::OLE' )
];
MJD says "you can't just make shit up and expect the computer to know what you mean, retardo!" | I run a Win32 PPM repository for perl 5.6.x and 5.8.x -- I take requests (README). | ** The third rule of perl club is a statement of fact: pod is sexy. |
| [reply] [Watch: Dir/Any] [d/l] |
Thank you... this was exactly what I needed.
| [reply] [Watch: Dir/Any] |