Concuerdo con roman al advertir que ese código tiene algo que llama la atención. Handle tiene el valor de la ventana que deseas siempre que le de tiempo a estar abierta en ese momento. Pero el código, tal como está me hace pensar que o bien el bucle sobra, o la obtención del Hanle debe realizarse dentro del mismo. Si la función pretende esperar a que el nombre de la clase del Handle obtenido sea el que esperas, entonces tu función debe ser modificada a algo como esto:
Código Delphi
[-]procedure TForm1.WaitUntilFieldFocused(sFieldName: String);
var
Handle: THandle;
Buffer: array[Byte] of Char;
begin
Buffer := '';
while (Buffer <> sFieldName) do
begin
Handle := GetForegroundWindow;
ZeroMemory(@Buffer, SizeOf(Buffer));
GetClassName(Handle, Buffer, 255);
Sleep(250);
end;
end;
Saludos.