私はTProcessInfoと呼ばれる非視覚的なオープン ソース コンポーネントを使用して、プロセスのリスト、ProcessID、および ListView に入力したフル パスを取得しています。
これを行うために使用しているコード:
procedure TForm1.FormCreate(Sender: TObject);
var
i: integer;
Process: TProcessItem;
begin
for i := 0 to ProcessInfo1.RunningProcesses.Count -1 do
begin
Process := ProcessInfo1.RunningProcesses[i];
with lv.Items.Add do
begin
Caption := Process.ExeFile;
SubItems.Add(IntToStr(Process.ProcessID));
SubItems.Add(Process.FullPath);
end;
end;
end;
コードは常に最後の行で壊れます:SubItems.Add(Process.FullPath);
エラーメッセージが表示されます:
システムエラー。コード:87
パラメータが間違っています。
コンポーネントで FullPath を取得するコードは次のとおりです。
function TProcessItem.GetFullPath: TFileName;
var
hProcess: THandle;
begin
hProcess := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ,False,FProcessID);
if hProcess <> 0 then
begin
try
SetLength(Result,MAX_PATH);
FillChar(Result[1],Length(Result) * SizeOf(Char), 0);
if GetModuleFileNameEx(hProcess,0,PChar(Result),Length(Result)) > 0 then
Result := Trim(Result)
else
RaiseLastOSError;
finally
CloseHandle(hProcess)
end;
end
else
RaiseLastOSError;
end;
エラー状態のように - パラメータが正しくない場合、どうすればこれを変更できますか?
** コンポーネントは PsAPI を使用し、Windows 7 Ultimate x64 で Delphi XE2 を使用しています Windows XP Pro x86 でも発生します