Читали ли вы документацию EnumProcesses и пример , связанный с ней?Кажется, вы вообще не имеете дело с данными персонажей.EnumProcesses заполняет $abuffer
N 4-байтовыми (или DWORD) записями, по одной для каждого процесса.Это 4-байтовое значение представляет собой просто число, а не 4 символа.
Если вы хотите получить больше информации о конкретном процессе, вам нужно указать этот 4-байтовый номер (упоминаемый в документации Win API как«идентификатор процесса») в функцию, например OpenProcess или PrintProcessNameAndID.
Вот код, который отображает результаты в виде 4-байтовых чисел с прямым порядком байтов:
use Modern::Perl; # strict, warnings, 5.10 features
use Win32::API;
my $EnumProcesses= new Win32::API( 'psapi', 'EnumProcesses','PNP');
my $process_ids_packed = " " x 4096;
my $num_processes_packed = " " x 4; # you don't need 4096 here.
$EnumProcesses->Call($process_ids_packed,4096,$num_processes_packed);
my ($num_processes) = unpack "V", $num_processes_packed;
my @process_ids = unpack "V$num_processes", $process_ids_packed;
for (@process_ids) {
say;
}
А вот и результаты:
C:\Users\pgp\Documents\src\tmp>perl winapi.pl
0
4
252
392
464
472
520
536
544
596
692
748
780
788
912
964
412
456
908
1116
1212
1228
1460
1492
1520
1528
1576
1724
1740
1748
1988
2028
312
2288
2544
2592
2756
3004
3116
3216
3340
3048
2792
1320
2868
3760
2404
4196
2692
4084
1768
538976288
538976288
538976288
538976288
538976288
[... lots more lines ...]
538976288
538976288
538976288
538976288
538976288
538976288