Копирование Handle окна используя клавиатуру

Получаю Handle окна другой программы при наведении курсора мышки на форму (то есть форму другой программы). И вывожу его в LabelHandle.Caption.

Интересует ответ на вопрос: Как, при нажатии на клавиатуре, комбинации ctrl + C скопировать в буфер Handle.

procedure TForm1.Timer1Timer(Sender: TObject);
var
  Wnd: HWND;                   // Hahdle найденного окна
  Pos: TPoint;                 // Позиция курсора
  Rect: TRect;                 // Координаты окна
  buff: array[0..255] of char; // Буфер
  WndText: string;             // Текст окна
  NameClass: string;           // Класс окна
begin
   // Получаем позицию курсора
   GetCursorPos( Pos );
   // Получаем Handle окна под курсором
   Wnd := WindowFromPoint( Pos );
   GetWindowRect( Wnd, Rect );
   GetWindowText( Wnd, buff, SizeOf( buff ) );
   WndText := StrPas( buff );
   GetClassName( Wnd, buff, SizeOf( buff ) );
   NameClass := StrPas( buff );

   LabelHandle.Caption := 'Handle: ' + IntToStr( Wnd );
   LabelName.Caption := 'Name: ' + WndText;
   LabelClass.Caption := 'Class: ' + NameClass;
end;

Ответы (1 шт):

Автор решения: Alex R.

Если это должна быть замена таймера, то выполняем следующие шаги.

Пишем функцию.

function GetHandle: Integer;
var
  Pos: TPoint;                 // Позиция курсора
begin
   // Получаем позицию курсора
   GetCursorPos( Pos );
   // Получаем Handle окна под курсором
   Result := WindowFromPoint( Pos );
end;

Устанавливаем перехват формой нажатие клавиш.

KeyPreview := True

Пишем событие KeyDown с проверкой на нужные клавиши и копированием в буфер.

uses
  Vcl.Clipbrd;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  if (Shift = [ssCtrl]) and (key = Ord('C')) then
    Clipboard.AsText := IntToStr(GetHandle);
end;

Все это будет работать, только когда окно активно. Если требуется чтобы это работало с фокусом на любом окне, то надо использовать виндовые хуки.

Самый простой способ это выводить не в LabelHandle.Caption, а использовать TEdit, в этом случае CTRL+C будет работать из коробки, так сказать.

→ Ссылка