commit for archiving

This commit is contained in:
2025-08-27 09:03:01 +02:00
commit a163c80769
140 changed files with 49745 additions and 0 deletions

View 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

View 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";
}
}