我用它来发送文本到一个没有界面的恼人的弹出式3G应用程序,它是一个黑客,我们不会留下任何选项.
procedure TForm1.TypeMessage(Msg: string);
var
CapsOn: boolean;
i: integer;
ch: char;
shift: boolean;
key: short;
begin
CapsOn := (GetKeyState( VK_CAPITAL ) and $1) <> 0;
for i:=1 to length(Msg) do
begin
ch := Msg[i];
ch := UpCase(ch);
if ch <> Msg[i] then
begin
if CapsOn then
begin
keybd_event( VK_SHIFT, 0, 0, 0 );
end;
keybd_event( ord(ch), 0, 0, 0 );
keybd_event( ord(ch), 0, KEYEVENTF_KEYUP, 0 );
if CapsOn then
begin
keybd_event( VK_SHIFT, 0, KEYEVENTF_KEYUP, 0 );
end;
end
else
begin
key := VKKeyScan( ch );
// UpperCase
if ((not CapsOn) and (ch>='A') and (ch <= 'Z')) or
((key and $100) > 0) then
begin
keybd_event( VK_SHIFT, 0, 0, 0 );
end;
keybd_event( key, 0, 0, 0 );
keybd_event( key, 0, KEYEVENTF_KEYUP, 0 );
if ((not CapsOn) and (ch>='A') and (ch <= 'Z')) or
((key and $100) > 0) then
begin
keybd_event( VK_SHIFT, 0, KEYEVENTF_KEYUP, 0 );
end;
end;
end;
end;
Run Code Online (Sandbox Code Playgroud)
希望有所帮助
UPDATE
编辑允许其他字符(非alpha),即移位数字!"££等.
请参阅keybd_event函数.您需要在字符和键盘扫描代码之间执行转换,但互联网上充满了关于此的信息.
除非您需要模拟输入,否则将WM_SETTEXT发送到编辑框窗口然后将Enter作为键盘发送是有意义的.这样可以避免处理扫描码.