ОБСУЖДЕНИЕ

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

1 ответов 4,3 тыс.
AI-выжимка обсуждения скоро

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

Статус
Закрыто для дальнейших ответов.
Автор темы
Всем привет.

Народ помогите со следующей проблемой.

Пытаюсь найти пид окна через его хэндл. Выполняю перебор всех окон и читаю их пиды.

Затем читаю все процессы в памяти и вытаскиваю из них пиды.

Проблема вот в чем, пид процесса, допустим дельфи,
не совпадает с пидом дельфийского окна.

ниже приведу примеры для извлечения пида из окна и из процесса.


Извлекаю пид окна
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;

Народ помогите разобраться с проблемой. Код вроде несложный, но меня помоему уже клинит с ним
 
Люди помогите с проблемой.

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

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