use Win32::Process; use Win32; use Win32::Shortcut; my $link = Win32::Shortcut->new; $link->Load("D:\\Program Files\\Putty\\start pageant.lnk"); $link->Close(); # print "Shortcut to: $link->{Path} $link->{Arguments}\nDirectory: $link->{WorkingDirectory}"; Win32::Process::Create(my $process, $link->{Path}, qq("$link->{Path}" $link->{Arguments}), $link->{ShowCmd}, NORMAL_PRIORITY_CLASS, $link->{WorkingDirectory}) or die Win32::FormatMessage( Win32::GetLastError() ); require Win32::GuiTest; # while we're waiting... my $result = $process->Wait(2_000); # returns immediately if pageant was running # times out if it just got started up while(1) { my @windows = Win32::GuiTest::FindWindowLike(0, qr/^Pageant:\s+Enter\s+Passphrase/i) or last; sleep 1; }