Készítünk egy függvényt GetSystemFocus néven, mely képes arra, hogy visszaadja az aktív program azon ablakának azonosítóját mely birtokolja a fókuszt.
function GetSystemFocus: Integer;
var
h1, h2: Integer;
begin
Első lépésként meghatározzuk, hogy melyik az aktív alkalmazás aktív ablaka. Ezt a GetForegroundWindow függvény szolgáltatja.
Szükségünk lesz továbbá e program folyamatazonosító számára is. Ezt a GetWindowThreadProcessID függvény adja vissza, melynek első paraméterként az imént lekérdezett ablak azonosítót kell átadni.
h2:=GetWindowThreadProcessID(h1, nil);
Következő lépésként csatlakozunk az aktuálisan futó alkalmazás beviteli szálához. Ettől kezdve minden olyan tevékenységünk, mely az adatbevitelhez kötődik valamilyen szinten az már nem a saját alkalmazásunkra, hanem a másikra fog vonatkozni. Ehhez az AttachThreadInput függvény kell meghívnunk. Első paraméterként a saját alkalmazásunk szálának azonosítójával, másodikként pedig annak a programnak a szálát kell megadni, melyhez csatlakozni szeretnénk, végül a harmadik paraméter ha igaz, akkor a csatlakozás létrejön, míg hamis esetén helyre áll az eredeti állapot.
Ezt követően a GetFocus függvény hívása már a másik alkalmazás fókuszt birtokló ablakának azonosítóját adja vissza.
if AttachThreadInput(GetCurrentThreadID, h2, true) then begin
result:=GetFocus;
A fókusz lekérdezése után visszaállítjuk az eredeti állapotot.
AttachThreadInput(GetCurrentThreadID, h2, false);
Abban az esetben, ha a saját alkalmazásunk az aktív, akkor a csatlakozás nem fog sikerülni, viszont ez esetben nincs is rá szükség, hiszen saját alkalmazásunk fókuszt birtokló ablakának azonosítóját egyszerűen csak le kell kérdeznünk a GetFocus által.
end else begin
result:=GetFocus;
end;
end;