Wie erhält man das Handle des Controls, das den Eingabefocus hat?


Für Fenster in einem Prozess des eigenen Programms hilft ein einfacher Aufruf der API-Funktion "GetFocus". Für Fenster in fremden Prozessen muß man zuerst eine Beziehung zwischen dem eigenen Prozess und dem Prozess, der das aktive Control enthält, herstellen. Das erledigt diese Funktion der man das Handle des aktiven Top-Level-Fensters übergeben muß. Das Handle des aktiven Top-Level-Fensters erhält man z.B. mit "GetForegroundWindow".

  function GetFocussedWindow(ParentWnd : HWnd) : HWnd;
  var OtherThreadID,Buffer : DWord;
  begin
    OtherThreadID := GetWindowThreadProcessID(ParentWnd, @Buffer);
    if AttachThreadInput(GetCurrentThreadID, OtherThreadID, true) then begin
      Result := GetFocus;
      AttachThreadInput(GetCurrentThreadID, OtherThreadID, false);
    end else begin
      Result := 0;
    end;
  end;
Delphi 1 Delphi 2 Delphi 3 Delphi 4
nicht getestet Version nicht betroffen getestet

siehe auch:


Delphi FAQ