Delphi 非Unicode、非Ascii字符的SendInput
我正在编写一个全局钩子过程。使用SendInput发送ascii(<255)和Unicode字符。到目前为止,它运作良好。 但在我的语言泰米尔语中,有些字符是没有Unicode码点的组合字符。因此,在字体中,有255以上定义的字形。 如何为它们发送虚拟密钥代码?Delphi 非Unicode、非Ascii字符的SendInput,delphi,unicode,sendinput,Delphi,Unicode,Sendinput,我正在编写一个全局钩子过程。使用SendInput发送ascii(
尽管这些标志符号没有代码点,但它们有类似于u0BAF_0bbf的标志符号名称。第一部分和第二部分是用Unicode定义的。这些名称称为命名序列,由Unicode批准。
代码: 编辑: 是的,我会单独发送每个代码点。每个代码点都有附加的图示符。另外还有一个结合了两者的设计。它在视觉上看起来更好,表现为一个角色。由于它是单独定义的,我认为应该有一种使用sendinput发送的方法
Edit2:
还有一些字符不能机械组合。
编辑3:
测试证明罗布·肯尼迪是正确的。第二个代码点不会以机械方式显示。它被智能地与第一个组合,以获得第三个新的组合雕文。使用字形(名称)编码。我以编程方式执行相同操作的代码干扰了此过程,因此出现了问题
非常感谢向我们展示您迄今为止开发的代码。您不能单独发送每个代码点吗?谢谢。问题解决了。第三版的解释。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;