Este exemplo mostra que, na aplicação de console, de fato apenas os primeiros 255 caracteres são exibidos, mas isso é uma limitação do console, pois ao colocar um breakpoint na linha da chamada a SendInput, após pressionar F9 para continuar, todos os 512 caracteres do texto de exemplo são escritos na janela de edição de código do Delphi
- program Project2;
- {$APPTYPE CONSOLE}
- {$R *.res}
- uses
- System.SysUtils, Winapi.Windows;
- const
- TEXT = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras volutpat lacinia enim. Ut a mattis nibh, in ' + 'pretium erat. Integer eget est purus. Aenean diam lacus, auctor vel finibus vitae, gravida varius tellus. In in lobortis orci. Vivamus venenatis, velit ac rutrum sagittis, justo tellus ' + 'fermentum diam, quis semper dolor eros non ante. Aliquam nec lorem pharetra, iaculis lacus id, ultricies ligula. Maecenas suscipit sem ut tincidunt egestas. Vestibulum maximus mi nec metus scelerisque pellentesque tortor.';
- var
- Inputs: TArray<TInput>;
- C: Cardinal;
- I: Cardinal;
- begin
- try
- SetLength(Inputs,Length(TEXT) * 2);
- I := 0;
- for C := 1 to Length(TEXT) do
- begin
- ZeroMemory(@Inputs[I],SizeOf(TInput));
- Inputs[I].Itype := INPUT_KEYBOARD;
- Inputs[I].ki.dwFlags := KEYEVENTF_UNICODE;
- Inputs[I].ki.wScan := Ord(TEXT[C]);
- Inc(I);
- ZeroMemory(@Inputs[I],SizeOf(TInput));
- Inputs[I].Itype := INPUT_KEYBOARD;
- Inputs[I].ki.dwFlags := KEYEVENTF_UNICODE or KEYEVENTF_KEYUP;
- Inputs[I].ki.wScan := Ord(TEXT[C]);
- Inc(I);
- end;
- // Put a breakpoint on the line bellow and when the flow stops, put the
- // cursor after the "end." and press F9
- SendInput(Length(TEXT) * 2,Inputs[0],SizeOf(TInput));
- readln;
- except
- on E: Exception do
- Writeln(E.ClassName, ': ', E.Message);
- end;
- end.