Работа с хэндлами

  • Автор темы Spoiler
  • Дата начала
Статус
Закрыто для дальнейших ответов.
S

Spoiler

Гость
#1
Посетители форума обращаюсь к вам.
Последние три дня убил на работу с хэндлами. Застопорилась вся работа.

Просьба разясните почему пиды окон и пиды текущих процессов не совпадают. Надежда только на вас.

В ниже приведенном коде ищу указатель окон и через него определяю пид окна. Выполняю перебор всех окон.

Извлекаю пид окна
function EnumProc (Wd: HWnd; Param: LongInt): Boolean; stdcall;
Var
    mProcessID,mThreadID : Dword;
    Nm:Array[0..255] of Char;
    Cs: Array[0..255] of Char;
Begin
    GetWindowText(Wd,Nm,255);
    GetClassName(Wd,Cs,255);
    mThreadID:= GetWindowThreadProcessId(Wd,                                            @mProcessID);
    EnumProc := TRUE;
end;

procedure GetAllWindow;
Var
    Wd : HWnd;
    mProcessID,mThreadID : Dword;
begin
    form1.L5.Items.Clear;
    EnumWindows (@EnumProc, 0);
    Wd:=FindWindow( 0, 0 );
    While ( Wd <> 0 ) do
        Wd:=GetNextWindow(Wd,GW_HWNDNEXT);
end;
Ивлекаю пид процесса
procedure TForm1.Button2Click(Sender: TObject);
  var
      ContinueLoop    : BOOL;
      FSnapshotHandle : THandle;
      FProcessEntry32 : TProcessEntry32;
      HProgramm_ID    : Cardinal;
begin
  FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  FProcessEntry32.dwSize := Sizeof(FProcessEntry32);
  ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);

  while integer(ContinueLoop) <> 0 do
  begin
      HProgramm_ID := FProcessEntry32.th32ProcessID;
      form1.L.Items.Add( ExtractFileName( FProcessEntry32.szExeFile ) );
      form1.L1.Items.Add( inttostr( HProgramm_ID ) );


ContinueLoop := Process32Next( FSnapshotHandle, FProcessEntry32 );
    end;
end;
В итоге пиды окон несколько больше нежели пиды процессов которым принадлежат эти окна.

Народ помогите разобраться с проблемой.
Если несложно скажите что я не так делаю
 
K

konst_64

Гость
#2
Если несложно. Проясните мою проблему
 
Статус
Закрыто для дальнейших ответов.