Функции GetProcessID и GetThreadID, как ни странно, возвращают одинаковое значение N, а результатах работы программы tasklist (штатная команда Windows) я вижу совершенно иные значения PID для запущенной задачи

Модератор: Модераторы

{$mode delphi}{$H+}
uses
  Windows, jwatlhelp32;
function GetProcessID(AHandle: HANDLE): DWORD; stdcall; external 'kernel32.dll' name 'GetProcessId';
var
  h  : DWORD;
  res: TProcessEntry32W;
  ws : WideString;
  pid : DWORD;
begin
  pid:=GetCurrentProcessId;
  writeln('My PID:               ',pid);
  writeln('My PID by GetProcess: ',GetProcessID(GetCurrentProcess));
  h:=CreateToolhelp32Snapshot(TH32CS_SNAPALL, GetCurrentProcessId);
  FillChar(res, sizeof(res),0);
  res.dwSize:=sizeof(res);
  if Process32FirstW(h, res) then begin
    if (res.th32ProcessID<>pid) then
      repeat
      until (res.th32ProcessID=pid) or not Process32NextW(h, res);
    if res.th32ProcessID=pid then
      writeln('My Parent PID: ', res.th32ParentProcessID)
    else
      writeln('failed to find my parent!');
  end else
    writeln('failed to find my parent!');
  CloseHandle(h);
  writeln('Hit enter or open Task Manager to compare values!');
  readln;
end.

alex208210 писал(а):неправильно закрыт Toolhelp32Snapshot. Будет утечка памяти.
alex208210 писал(а):Toolhelp32Snapshot нужно закрывать CloseToolhelp32Snapshot(h);
alex208210 писал(а):проблему с утечкой памяти обнаружил именно в wince, на больших виндах не проверял, тогда точно утверждать не буду.
function CloseToolhelp32Snapshot(AHandle: HANDLE): LongBool; stdcall; external 'kernel32.dll' name 'CloseHandle';


Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1