あなたがEnumProcessesマニュアルを読み、exampleが、その中にリンクがありますか?あなたは文字データをまったく扱っていないようです。 EnumProcessesは、プロセスごとに1つ、Nの4バイト(またはDWORD)レコードを持つ$abuffer
を入力します。この4バイトの値は、単なる数字であり、4文字ではありません。
特定のプロセスに関する詳細を知りたい場合は、OpenProcessまたはPrintProcessNameAndIDなどの関数に、この4バイトの数値(Win APIドキュメントでは「プロセス識別子」と呼ばれます)をフィードする必要があります。ここで
は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
あなたは何をしようとしていますか?私は、Win32 APIを使用していても心が弱いのではないので、おそらくCPANモジュールがあり、あなたが望むことを大騒ぎにすることはないと思っています。 – Hugmeir
私はこれに対する解決策が別のモジュールmanを使うことではないと思います。明らかに、私はWin32 :: APIをperlで動かそうとしています。 Win32 :: APIを使用している – nebulus
はそれ自身の目標ではありません。 Win32 :: APIを使って何か*しようとしています。あなたの究極の目標は何ですか? –