I had some luck with this:
use Win32::GuiTest qw(:ALL);
Win32::GuiTest CPAN link
Specifically, i was interacting with the LPR printing program from the command prompt. You didn't cite any specific code up there so I'm not sure exactly what you are trying, but I got LPR to interact with me on the command line with some form of the code below:
use strict;
use warnings;
use Win32;
use Win32::Process;
use Win32::GuiTest qw(:ALL);
# start new command prompt
my $process_object_cmd;
Win32::Process::Create( $process_object_cmd, "C:\\Windows\\system32\\c
+md.exe","",0, NORMAL_PRIORITY_CLASS, ".", ) or die "Could not spawn p
+rocess\n";
&Set_Focus( "Command Prompt" );
my $ipAddress = 'test';
my $printName = 'test';
my $file = 'test';
#
# Below in the qq[] is where I'd try sending some input to
# whatever DOS app you're going for...here I'm printing
# to LPR...
#
SendKeys( qq[lpr -–S $ipAddress -–P $printName filename $file] );
SendKeys( "~" );
#
# If you need to send more keystrokes or whatever, check
# the documentation, pretty much any keyboard stuff is
# possible with that module
#
# Subroutine: Set_Focus
# Parameters: window Name
# Description: Takes the name of a window, uses tools from GuiTest to
+set focus
# to that window so that we may send it input. Returns
+ window ID
sub Set_Focus {
my $windowName = shift;
my $retryCounter = 0;
my @windows = FindWindowLike( undef, "$windowName", "" );
unless ( @windows ) {
@windows = FindWindowLike( undef, "$windowName", "" );
sleep(1);
$retryCounter++;
if( $retryCounter == 5 ) { die "Unable to gain control of $win
+dowName...\nScript exiting...\n" }
}
my $focusError = (bring_window_to_front( $windows[0] ));
return( $windows[0] );
}
# Subroutine: bring_window_to_front
# Parameters: window ID
# Description: Takes in window ID, and sets it as foreground window
sub bring_window_to_front {
my $window = shift;
my $success = 1;
unless ( $window ) { $window = "notyet" }
unless( $window eq "notyet" ) {
SetActiveWindow($window);
sleep(1);
SetForegroundWindow($window);
}
if ( $window eq "notyet" ) {
#print "* Could not set the window id: $window active\n";
$success = 0;
}
return $success;
}
(My apologies if the example isn't exactly perfect, I chopped it out of a much larger program)
Update
This example will probably just print the LPR help stuff, since I use 'test' for all the connection strings, just thought I'd let you know. Also added a couple extra comments in the code... |