非Unicode,非Ascii字符的SendInput

时间:2014-03-10 02:02:10

标签: delphi unicode sendinput

我正在撰写Global Hook程序。使用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是正确的。第二个代码点不是机械显示的。它与第一个智能组合以获得第三个新的组合字形。使用字形(名称)编码。我以编程方式执行相同操作的代码干扰了此过程,因此也解决了问题。很多谢谢

0 个答案:

没有答案