Пиды процессов и окон

  • Автор темы 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;
Народ помогите разобраться с проблемой. Код вроде несложный, но меня помоему уже клинит с ним
 
S

Spoiler

#2
Люди помогите с проблемой.

Почему пиды окон не совпадают с пидами процессов.

Кто работал с подобными вещами объясните пожалуйста
 
Статус
Закрыто для дальнейших ответов.