use Win32::OLE qw( EVENTS ); my $vt = Win32::OLE->new('{EEE78591-FE22-11D0-8BEF-0060081841DE}') || die "Can't start VoiceText"; my $use_id = $vt->Find( "Male Whisper" ); $vt->Select($use_id); $vt->Speak("Hello World"); while( $vt->{Speaking} ){ Win32::OLE->SpinMessageLoop(); Win32::Sleep( 100 ); } #### use Win32::OLE qw( EVENTS ); use Win32::TieRegistry; my $vt = Win32::OLE->new('{EEE78591-FE22-11D0-8BEF-0060081841DE}') || die "Can't start VoiceText"; my $ttl = $vt->CountEngines(); my $look_for = "RoboSoft Six"; for(my $x=1;$x <= $ttl;$x++){ my $mode_name = $vt->ModeName($x); my $mode_id = $vt->ModeID($x); if ($mode_name eq $look_for){ my($h1,$h2,$h3,$h4,$h5) = split(/\-/,$mode_id); $h1 = &Flip($h1); $h2 = &Flip($h2); $h3 = &Flip($h3); &ChangeVoiceRegKey("$h1$h2$h3$h4$h5"); } } $vt->Speak("Hello World"); while( $vt->{Speaking} ){ Win32::OLE->SpinMessageLoop(); Win32::Sleep( 100 ); } ######################################################### ######################################################### ######################################################### sub ChangeVoiceRegKey{ my $hsh = $_[0]; my $rf = $Registry->{"HKEY_CURRENT_USER\\Software\\Voice\\VoiceText\\Local PC"}= { "Mode", => [ pack("H*","$hsh"), "REG_BINARY" ] }; }################################## end ChangeVoiceRegKey sub Flip{ my $vle = $_[0]; $vle =~ s/(..)/$1\|/g; $vle =~ s/\|$//; my @all = split(/\|/,$vle); my $new_all; foreach my $li(reverse @all){ $new_all .= $li; } return $new_all; }################################## end Flip