ウィンドウがアクティブでフォアグラウンドにあることに依存するのではなく、問題のウィンドウにWM_CHARまたはWM_UNICHARメッセージを送信する必要があります。
この例は私にとってはうまくいくようです。ウィンドウlinks
で実行中のキーが送信されている間に、他のアプリケーションに切り替えることができました。cmd.exe
メールの入力が完了するまでに、リンクは に移動していましたexample.com
。
#!/usr/bin/env perl
use strict; use warnings;
use Encode qw(encode);
use Time::HiRes qw( usleep );
use Win32::GuiTest qw(SendMessage ShowWindow WaitWindow);
use constant WM_CHAR => 0x0102;
use constant SW_HIDE => 0;
use constant SW_SHOW => 5;
system qw(start links);
my $hwnd = WaitWindow('Links', 5);
ShowWindow $hwnd, SW_HIDE;
send_message($hwnd, "ghttp://example.com/\r");
ShowWindow $hwnd, SW_SHOW;
send_message($hwnd, "q\r", 3_000_000);
sub send_message {
my ($hwnd, $msg, $delay) = @_;
$delay ||= 25_000;
my @keys = encode_keys($msg);
for my $key (@keys) {
SendMessage $hwnd, WM_CHAR, $key, 0;
usleep $delay;
}
return;
}
sub encode_keys {
my ($msg) = @_;
map ord, map encode('UTF16-LE', $_), split //, $msg;
}