【问题标题】:Can't copy Russian (Cyrillic or Unicode) symbols using SendInput(Edit1.Text)无法使用 SendInput(Edit1.Text) 复制俄语(西里尔文或 Unicode)符号
【发布时间】:2011-10-18 08:40:51
【问题描述】:
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); 复制俄语(西里尔)符号的任何建议

【问题讨论】:

标签: delphi unicode character-encoding delphi-7 sendinput


【解决方案1】:

在这个例子中,我使用了来自JEDI project 的单位JclUnicode.pas。如果你有 Delphi 6,那么你可以在 uses 子句中省略 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;

【讨论】:

  • SendText('UPPER lower 1234567890 /*-+!"£$%^&*()_+= ąčęėįšųūž'); 导致 UER LOWER 1234567890 /*-+!"£$%^ &*()_+= XE2 中的 ĄČĘĖĮŠŲŪŽŽ。
  • UPPER 中的 P 等双键未显示。我们需要释放密钥以生成另一个密钥。请参阅下面的答案。
【解决方案2】:
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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-12
    • 1970-01-01
    • 2015-10-14
    • 2017-08-21
    • 2013-08-11
    • 1970-01-01
    相关资源
    最近更新 更多