Форум: "WinAPI";
Текущий архив: 2003.01.16;
Скачать: [xml.tar.bz2];
ВнизКак по ID процесса узнать главное его окно. Найти похожие ветки
← →
SottNick (2002-11-28 07:24) [0]Нужна функция обратная GetWindowThreadProcessId.
Перебор окон вряд ли подойдет.
Рабочая прога, выдающая нужный результат - Process Explorer от SysInternals.com
← →
Song (2002-11-28 08:25) [1]Тем не менее именно перебором это и делается.
← →
Digitman (2002-11-28 08:26) [2]в отличии от ф-ции GetWindowThreadProcessId() , результат которой одназначен (вернуть идент-ры код.потока, создавшего некое интересующее окно, и процесса, породившего этот код.поток), "обратная" ф-ция таковой быть не может, ибо код.поток в ходе исполнения может создавать любое число окон (в т.ч. и вообще не создавать)
← →
MikeZ (2002-11-28 15:25) [3]Код, который перебором выводит заглавие окна + имя файла. Если добавить несколько проверок, то будет выводить то, что нужно.
Procedure TForm1.Button1Click(Sender: TObject);
Var
// Uses TlHelp32
Window : HWnd;
hSn : THandle;
lppe : TProcessEntry32;
Buffer : Array[0..127] Of Char;
hProc : Cardinal;
Begin
//Ищем хендл верхнего окна
Window := GetForegroundWindow;
Repeat
If (Window <> Application.Handle) And
(GetWindowText(Window, Buffer, SizeOf(Buffer)) <> 0)
Then Begin
//Ищем ID процесса
GetWindowThreadProcessId(Window, @hProc);
//Делаем снимок процесса
hSn := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, hProc);
//Получаем список всех процессов
If Process32First(hSn, lppe) Then
Repeat
//Сравниваем ID и получаем имя ехе и путь ????????????????
If lppe.th32ProcessID = hProc Then
Begin
GetWindowText(Window, Buffer, SizeOf(Buffer));
{**********************}
ListBox1.Items.Add(Buffer + " (" + lppe.szExeFile + ")");
{**********************}
End;
Until Not Process32Next(hSn, lppe);
CloseHandle(hSn);
End;
//Ищем следующее окно
Window := GetNextWindow(Window, GW_HWNDNEXT);
Until Window = 0;
End;
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2003.01.16;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.009 c