2

我正在编写一个全局挂钩程序。使用 SendInput 发送 ascii ( < 255 ) 和 Unicode 字符。到目前为止,它运作良好。但在我的语言泰米尔语中,有些字符是没有 Unicode 代码点的组合字符。所以在字体中定义了 255 以上的字形。如何为它们发送虚拟键码?
尽管这些字形没有代码点,但它们具有像 u0BAF_u0BBF 这样的字形名称。第一部分和第二部分用 Unicode 定义。这些名称被称为命名序列并由 Unicode 批准。
代码:

procedure GenUKey(const vk: integer;  const bUnicode: bool);
var
  kb: TKEYBDINPUT;
  Input: TINPUT;
begin
{keydown}
{  ZeroMemory(@kb,sizeof(kb));}
{  ZeroMemory(@input,sizeof(input));}

{keydown}
  if bUnicode then
  begin
    kb.wVk:= 0;
    kb.wScan:= vk; ;
    kb.dwFlags:= $4;
{ KEYEVENTF_UNICODE=4}
  end
  else
  begin
    kb.wVk:= vk;
    kb.wScan:= 0; ;
    kb.dwFlags:= 0;
  end;
  Input.itype:= INPUT_KEYBOARD;
  Input.ki:= kb;

  SendInput(1, Input,sizeof(Input));

{keyup}
  if bUnicode then
  begin
    kb.wVk:= 0;
    kb.wScan:= vk ;
    kb.dwFlags:= $4 or KEYEVENTF_KEYUP;
{KEYEVENTF_UNICODE=4}
  end
  else
  begin
    kb.wVk:= vk;
    kb.wScan:= 0;
    kb.dwFlags:= KEYEVENTF_KEYUP;
  end;
  Input.itype:= INPUT_KEYBOARD;
  Input.ki:= kb;

  SendInput(1,Input,sizeof(Input));
end;

编辑:是的,我确实单独发送每个代码点。每个代码点都附有字形。还有另一种结合了两者的设计。它在视觉上看起来更好,并且表现得像一个角色。由于它是单独定义的,我认为应该有一种使用 sendinput 发送的方法。
Edit2:
还有一些字符不能机械组合。
编辑 3:测试证明 Rob Kennedy 是正确的。第二个代码点不会机械地显示。它与第一个智能组合得到第三个新组合字形。使用字形(名称)编码。我以编程方式执行相同操作的代码干扰了此过程,因此出现了问题。
非常感谢

4

0 回答 0