Не удается скопировать русские символы (кириллицу или юникод) с помощью SendInput (Edit1.Text) - PullRequest
1 голос
/ 18 октября 2011
procedure SendText(ds:string);
var
  TI: TInput;
  KI: TKeybdInput;
  i: integer;
begin
  TI.Itype := INPUT_KEYBOARD;
  for i := 1 to Length(ds) do
  begin
    KI.wVk := Ord(UpCase(ds[i]));
    KI.dwFlags := 0;
    TI.ki := KI;
    SendInput(1, TI, SizeOf(TI));
    KI.dwFlags := KEYEVENTF_KEYUP;
    TI.ki := KI;
    SendInput(1, TI, SizeOf(TI));
  end;
end;

Как я могу добавить Unicode?Любые предложения, как скопировать русские (кириллица) символы, используя SendInput(Edit1.Text);

Ответы [ 2 ]

7 голосов
/ 18 октября 2011

В этом примере я использовал модуль JclUnicode.pas из проекта JEDI . Если у вас установлена ​​Delphi 6, вы можете опустить JclUnicode в предложении использования.

uses
  JclUnicode;

procedure SendText(const Value: WideString);
var
  I: Integer;
  S: WideString;
  TI: TInput;
  KI: TKeybdInput;
const
  KEYEVENTF_UNICODE = $0004;
begin
  S := WideUpperCase(Value); 
  TI.Itype := INPUT_KEYBOARD;
  for I := 1 to Length(S) do
  begin
    KI.wVk := 0;
    KI.dwFlags := KEYEVENTF_UNICODE;
    KI.wScan := Ord(S[I]);
    TI.ki := KI;
    SendInput(1, TI, SizeOf(TI));
  end;
end;
0 голосов
/ 06 апреля 2019
uses
  JclUnicode;

procedure SendText(const Value: WideString);
var
  I: Integer;
  S: WideString;
  TI: TInput;
  KI: TKeybdInput;
const
  KEYEVENTF_UNICODE = $0004;
begin
  S := WideUpperCase(Value); 
  TI.Itype := INPUT_KEYBOARD;
  for I := 1 to Length(S) do
  begin
    KI.wVk := 0;
    KI.dwFlags := KEYEVENTF_UNICODE;
    KI.wScan := Ord(S[I]);
    TI.ki := KI;
    SendInput(1, TI, SizeOf(TI));

    // release keys to avoid double key missing (like P in UPPER)
    KI.dwFlags := KEYEVENTF_KEYUP;
    TI.ki := KI;
    SendInput(1, @TI, SizeOf(TI));     
  end;
end;
...