Добрый день.
Просмотрел все вопросы по теме получения информации о "чужих" процессах. Выбрал нужный функционал, все работает, но нужный результат получить не могу. Помогите разобраться.
Зная окно, мне необходимо получить имя исполняемого файла, который при запуске создал это окно.
Я получаю указатель активного окна в системе. По этому указателю получаю идентификатор процесса создавшего это окно.
Параллельно с помошь функции CreateToolhelp32Snapshot из небезызвестного ToolHelp получаю список процессов.
Далее, перебираю полученный список процессов и сравниваю полученные PID с PID который получил функцией PID := GetWindowThreadProcessID(GetForeGroundWindow, nil);
Таки ни одного соответствия не получаю. Визуально вижу, что PID полученный по хендлу окна находится в допустимом диапазоне.
Объясните мне, что я делаю неправильно?
Вот код реализующий вышенаписанное:
procedure TForm1.Button2Click(Sender: TObject);
var ContinueLoop:Boolean;
FSnapshotHandle:THandle;
FProcessEntry32:TProcessEntry32;
const PROCESS_TERMINATE=$0001;
begin
whandle := GetForeGroundWindow;
PID := GetWindowThreadProcessID(whandle, nil);
FSnapshotHandle:= CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
FProcessEntry32.dwSize:= Sizeof(FProcessEntry32);
ContinueLoop:= Process32First(FSnapshotHandle,FProcessEntry32);
while (integer(ContinueLoop)<>0)do
begin
If PID=FProcessEntry32.th32ProcessID Then
begin
Memo1.Lines.Add(ExtractFileName(FProcessEntry32.szExeFile));
timer1.Enabled := False;
end;
ContinueLoop:=Process32Next(FSnapshotHandle,FProcessEntry32);
end;
CloseHandle(FSnapshotHandle);
end;