commit for archiving
This commit is contained in:
220
Perl/site/lib/Win32/Process/List.pm
Normal file
220
Perl/site/lib/Win32/Process/List.pm
Normal file
@@ -0,0 +1,220 @@
|
||||
package Win32::Process::List;
|
||||
|
||||
use 5.006;
|
||||
use strict;
|
||||
use warnings;
|
||||
use Carp;
|
||||
use Data::Dumper;
|
||||
|
||||
require Exporter;
|
||||
require DynaLoader;
|
||||
use AutoLoader;
|
||||
|
||||
our @ISA = qw(Exporter DynaLoader);
|
||||
|
||||
# Items to export into callers namespace by default. Note: do not export
|
||||
# names by default without a very good reason. Use EXPORT_OK instead.
|
||||
# Do not simply export all your public functions/methods/constants.
|
||||
|
||||
# This allows declaration use Win32::Process::List ':all';
|
||||
# If you do not need this, moving things directly into @EXPORT or @EXPORT_OK
|
||||
# will save memory.
|
||||
our %EXPORT_TAGS = ( 'all' => [ qw(
|
||||
|
||||
) ] );
|
||||
|
||||
our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } );
|
||||
|
||||
our @EXPORT = qw(
|
||||
|
||||
);
|
||||
our $VERSION = '0.05';
|
||||
|
||||
sub AUTOLOAD {
|
||||
# This AUTOLOAD is used to 'autoload' constants from the constant()
|
||||
# XS function. If a constant is not found then control is passed
|
||||
# to the AUTOLOAD in AutoLoader.
|
||||
|
||||
my $constname;
|
||||
our $AUTOLOAD;
|
||||
($constname = $AUTOLOAD) =~ s/.*:://;
|
||||
croak "& not defined" if $constname eq 'constant';
|
||||
local $! = 0;
|
||||
my $val = constant($constname, @_ ? $_[0] : 0);
|
||||
if ($! != 0) {
|
||||
if ($! =~ /Invalid/ || $!{EINVAL}) {
|
||||
$AutoLoader::AUTOLOAD = $AUTOLOAD;
|
||||
goto &AutoLoader::AUTOLOAD;
|
||||
}
|
||||
else {
|
||||
croak "Your vendor has not defined Win32::Process::List macro $constname";
|
||||
}
|
||||
}
|
||||
{
|
||||
no strict 'refs';
|
||||
# Fixed between 5.005_53 and 5.005_61
|
||||
if ($] >= 5.00561) {
|
||||
*$AUTOLOAD = sub () { $val };
|
||||
}
|
||||
else {
|
||||
*$AUTOLOAD = sub { $val };
|
||||
}
|
||||
}
|
||||
goto &$AUTOLOAD;
|
||||
}
|
||||
|
||||
bootstrap Win32::Process::List $VERSION;
|
||||
|
||||
# Preloaded methods go here.
|
||||
|
||||
sub new
|
||||
{
|
||||
my $class = shift;
|
||||
my $self = {
|
||||
nProcesses=>0,
|
||||
processes=>[],
|
||||
isError=>0,
|
||||
Error=>undef
|
||||
};
|
||||
bless $self, $class;
|
||||
my $error = undef;
|
||||
my $err = ListProcesses($error);
|
||||
if($error) {
|
||||
$self->{isError} = 1;
|
||||
$self->{Error} = $error;
|
||||
}
|
||||
#my @arr = @{ $err };
|
||||
# $self->{processes} = [ @arr ];
|
||||
$self->{processes} = [ $err ];
|
||||
my %h = %{ $err };
|
||||
my $nProcesses = (scalar keys %h);
|
||||
$self->{nProcesses} = $nProcesses;
|
||||
return $self;
|
||||
|
||||
}
|
||||
|
||||
sub ProcessAlive
|
||||
{
|
||||
my $self = shift;
|
||||
my $process=shift;
|
||||
my $usePID=0;
|
||||
if($process =~ /^\d*$/) # PID
|
||||
{
|
||||
$usePID=1;
|
||||
}
|
||||
if($process !~ /\.exe/)
|
||||
{
|
||||
$process .= '.exe';
|
||||
}
|
||||
my $error = undef;
|
||||
my $y = undef;
|
||||
my $processes=ListProcesses($y, $error);
|
||||
#my %h=%{@{$processes}[0]};
|
||||
my %h=%{$processes};
|
||||
my $pid=$h{$process};
|
||||
|
||||
return $pid if $usePID == 0;
|
||||
}
|
||||
|
||||
sub GetNProcesses
|
||||
{
|
||||
my $self = shift;
|
||||
return $self->{nProcesses};
|
||||
}
|
||||
|
||||
sub GetProcessPid
|
||||
{
|
||||
my $self = shift;
|
||||
my $pr = shift;
|
||||
$self->{isError} = 0;
|
||||
my @a = @{ $self->{processes} };
|
||||
my %h = %{ $a[0] };
|
||||
my $count = 0;
|
||||
foreach my $key (keys %h)
|
||||
{
|
||||
if(lc($key) =~ /$pr/) {
|
||||
$a[$count] = $h{$key};
|
||||
$count++;
|
||||
}
|
||||
}
|
||||
if($count > 0) {
|
||||
return @a;
|
||||
}
|
||||
$self->{isError} = 1;
|
||||
$self->{Error} = "Error: no PID found for $pr";
|
||||
return( qw/-3/ );
|
||||
}
|
||||
|
||||
sub GetProcesses
|
||||
{
|
||||
my $self = shift;
|
||||
$self->{isError} = 0;
|
||||
my @tmp = @{ $self->{processes} };
|
||||
my %h = %{ $tmp[0] };
|
||||
return %h;
|
||||
|
||||
}
|
||||
|
||||
sub IsError
|
||||
{
|
||||
my $self = shift;
|
||||
return $self->{isError};
|
||||
}
|
||||
|
||||
sub GetErrorText
|
||||
{
|
||||
my $self = shift;
|
||||
if($self->{isError} == 1)
|
||||
{
|
||||
return $self->{Error};
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
DESTROY
|
||||
{
|
||||
my $self = shift;
|
||||
#print "destroying!\n";
|
||||
}
|
||||
|
||||
# Autoload methods go after =cut, and are processed by the autosplit program.
|
||||
|
||||
1;
|
||||
__END__
|
||||
# Below is stub documentation for your module. You better edit it!
|
||||
|
||||
=head1 NAME
|
||||
|
||||
Win32::Process::List - Perl extension to get all processes and thier PID on a Win32 system
|
||||
|
||||
=head1 SYNOPSIS
|
||||
|
||||
use Win32::Process::List;
|
||||
my $P = Win32::Process::List->new(); constructor
|
||||
my @list = $P->GetProcesses(); returns an array of hashes
|
||||
my %h = %{ $list[0] }; get the hash with processname and pid
|
||||
foreach my $pr ( keys %h ) {
|
||||
print "Process $pr has PID " . $h{$pr} . "\n";
|
||||
}
|
||||
my $PID = $P->GetProcessPid("explorer"); get the PID of process explorer.exe
|
||||
my $np = $P->GetNProcesses(); returns the number of processes
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
Win32::Process::List is a module to get the running processes with their PID's from
|
||||
a Win32 System. Please look at Win32/Process/List/processes.pl.
|
||||
|
||||
=head2 EXPORT
|
||||
|
||||
None by default.
|
||||
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
Reinhard Pagitsch, E<lt>rpirpag@gmx.atE<gt>
|
||||
|
||||
=head1 SEE ALSO
|
||||
|
||||
L<perl>.
|
||||
|
||||
=cut
|
||||
27
Perl/site/lib/Win32/Process/processes.pl
Normal file
27
Perl/site/lib/Win32/Process/processes.pl
Normal file
@@ -0,0 +1,27 @@
|
||||
#!c:/perl/bin/perl -w
|
||||
use Win32::Process::List;
|
||||
use strict;
|
||||
|
||||
my $P = Win32::Process::List->new();
|
||||
if($P->IsError == 1)
|
||||
{
|
||||
print "an error occured: " . $P->GetErrorText . "\n";
|
||||
}
|
||||
|
||||
my %list = $P->GetProcesses();
|
||||
my $anz = scalar keys %list;
|
||||
print "Anzal im Array= $anz\n";
|
||||
my $count = 0;
|
||||
foreach my $key (keys %list) {
|
||||
my $pid = $list{$key};
|
||||
print sprintf("%15s has PID %5i", $key, $pid) . "\n";
|
||||
$count++;
|
||||
}
|
||||
print "Number of processes: $count\n";
|
||||
my $process = "explorer";
|
||||
my @hPIDS = $P->GetProcessPid($process);
|
||||
if($hPIDS[0] != -1) {
|
||||
foreach ( 0 .. $#hPIDS ) {
|
||||
print "$process has PID " . $hPIDS[$_] . "\n";
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user