Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > получить список окон


Автор: gonzales 7.1.2007, 00:38
Вопрос неоднократно обсуждался, но вразумительного ответа я не нашел, поэтому прошу не отсылать к поиску.

Раскрою суть вопроса:
Имеется запущеное приложения, я знаю только имя его исполняемого файла.
Далее делая снимок процессов и используя TProcessEntry32 я могу получить th32ProcessID процесса.
Мне нужно зная ID процесса найти handle его окна (или окон) для последующей работы уже непосредственно с окном,
а именно мне нужно сделать его активным.
А вот как это сделать, не прибегая к жестким методам типа сортировать все окна, у каждого окна искать процесс-родитель и сравнивать их хэндлы.

Автор: Sunvas 7.1.2007, 02:26
Цитата(gonzales @  7.1.2007,  00:38 Найти цитируемый пост)
А вот как это сделать, не прибегая к жестким методам типа сортировать все окна, у каждого окна искать процесс-родитель и сравнивать их хэндлы.

Как мне кажется это единственный способ. Зная процесс мы никак не можем узнать количество окон открытых им. Выход: нужно делая список всех окон проверять, равен ли номер процесса окна номеру процесса нашего. smile 

Автор: RA 7.1.2007, 03:43
EnumThreadWindows

Добавлено @ 03:50 
примерно так работает....

Код

Function EnumThreadWindowProc(H:THandle;Param:Pointer):Bool;Stdcall;
var  WindowText: array[0..255] of char;
Begin
   GetWindowText(h, WindowText, 255);
   Form1.Memo1.lines.Add(WindowText);

  Result:=True;
End;


procedure TForm1.Button1Click(Sender: TObject);
Var h        : Integer;
    Te32     : TThreadEntry32;
    hProcess : THandle;
    ProcessPid : integer;
Begin

  ProcessPid:= 123456;

  h := CreateToolHelp32Snapshot(TH32CS_SNAPTHREAD,0);

  Te32.dwSize := SizeOf(Te32);

  If Thread32First(h,Te32) Then
  Repeat

    If Te32.th32OwnerProcessID= ProcessPid  Then
      EnumThreadWindows(Te32.th32ThreadID,@EnumThreadWindowProc,0);

  Until Not Thread32Next(h,Te32)

  CloseHandle(h);
end;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)