Delphi World - это проект, являющийся сборником статей и малодокументированных возможностей  по программированию в среде Delphi. Здесь вы найдёте работы по следующим категориям: delphi, delfi, borland, bds, дельфи, делфи, дэльфи, дэлфи, programming, example, программирование, исходные коды, code, исходники, source, sources, сорцы, сорсы, soft, programs, программы, and, how, delphiworld, базы данных, графика, игры, интернет, сети, компоненты, классы, мультимедиа, ос, железо, программа, интерфейс, рабочий стол, синтаксис, технологии, файловая система...
Работа с другим приложением без Hook и DLL на примере GetFocus

Автор: SottNick

На стандартной форме (Form1):

Form1.FormStyle=fsStayOnTop - форма поверх остальных окон

Объекты:

  1. ТАЙМЕР (Timer1) с периодом 1000 или меньше,
  2. 3 метки (Label1, Label2, Label3). назначение их см. в тексте процедуры
  3. У таймера событие OnTimer. а вот для нее обработчик:

procedure TForm1.Timer1Timer(Sender: TObject);
var
  dwTargetOwner: DWORD; //указатель на подключаемый процесс
  dwThreadID: DWORD; //указатель на текущий процесс
  Result: longbool;
begin
  {В первой метке отображается Handle активного окна}
  Label1.Caption := IntToStr(GetForegroundWindow);
    //указатель на подключаемое приложение

  // Подключение потока другого окна
  // Указатель на подключаемый процесс
  dwTargetOwner := GetWindowThreadProcessId(GetForegroundWindow, nil);
  dwThreadID := GetCurrentThreadId(); //указатель на текущий процесс
  if (dwTargetOwner <> dwThreadID) then // если не один и тот же процесс
    Result := AttachThreadInput(dwThreadID, dwTargetOwner, TRUE); //подключение

  {Во второй метке отображается Handle объекта 'в фокусе' в активном окне}
  Label2.Caption := IntToStr(GetFocus); //фокус в другом приложении

  if (Result) then
    AttachThreadInput(dwThreadID, dwTargetOwner, FALSE); //отключение

  {В третей метке отображается Handle объекта 'в фокусе' в активном окне,
  но если это окно другого приложения, то Handle будет равен нулю,
  т.к. попытка получения Handle происходит после отключения потока}
  Label3.Caption := inttostr(GetFocus); //проверка после отключения

  {Эффект можно посмотреть, если запустить полученное приложение
  и сделать активным другое приложение}
  {Ясно, что полученный Handle объекта можно использовать
  по своему разумению. Например, считать из объекта текст и т.п.}

  // (C) SottNick 2000
end;

Проект Delphi World © Выпуск 2002 - 2004
Автор проекта: ___Nikolay