The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
#! perl

use lib 'blib/lib';
use lib 'blib/arch';

use Win32::OLE;
use Win32::Monitoring::DLLInject;
use Data::Dumper;

my $WshShell = Win32::OLE->new("WScript.Shell");
$WshShell->Run("notepad", 5);

sleep(1);

my %processes;

for my $line (`tasklist /v /nh`) {
 chomp($line);
 if ( $line ne "" ) {
  # extract PID
  my $pid = substr($line, 26, 8);
  # remove leading spaces
  $pid =~ s/^ *([0-9]+)$/$1/g;

  # extract process
  my $proc = substr($line, 0, 24);#.substr($line, 152, 72);
  # change multiple spaces to single spaces
  $proc =~ s/\s\s\s*/ /g;
  # remove trailing space
  $proc =~ s/\s$//g;
  # remove trailing N/A
  $proc =~ s/ N\/A$//g;

  # print tab seperated fields
  # print $pid, " ", $proc, "\n";
  $processes{$proc} = $pid;
  } 
}

my $P = Win32::Monitoring::DLLInject->new($processes{'notepad.exe'},'Y:\\perl\\Win32-Monitoring-DLLInject\\HookedFunctions.dll');

print Dumper($P);

while(1)
{
    sleep(1);
    my $msg_cnt = $P->StatMailSlot();
    for (my $i = 0; $i < $msg_cnt; $i++) {
        print $P->GetMessage(), "\n";
     }
}